邻接表存储图,深度和广度优先遍历
来源:互联网 发布:风暴大陆各种进阶数据 编辑:程序博客网 时间:2024/06/05 06:38
就拿这个图做实验了
#include<iostream>#include<vector>#include<queue>using namespace std;struct ArcNode{//弧结点结构int adjvex;//邻接顶点ArcNode *nextarc;//下一条弧};template <class T>struct VertextNode{//表头结点结构T Vertext;//顶点ArcNode* firstArc;//第一条弧};const int MAXSIZE=10;template<class T>class ALGraph{public:ALGraph(T a[],int n,int e);~ALGraph();void DFS(int v);void BFS(int v);vector<int> visited;private:VertextNode<T> adjlist[MAXSIZE];//顶点int vNum,arcNum;//顶点和弧的数目};template <class T>ALGraph<T>::ALGraph(T a[],int n,int e){vNum=n;arcNum=e;visited.assign(vNum,0);for(int k=0;k<n;k++){//k是局部变量adjlist[k].Vertext=a[k];//初始化顶点adjlist[k].firstArc=NULL;//初始化弧}cout<<"Input the vertexts of each arc."<<endl;int i,j;for(int k=0;k<e;k++){cin>>i>>j;ArcNode *arc=new ArcNode;arc->adjvex=j;arc->nextarc=adjlist[i].firstArc;//头插法建立链表adjlist[i].firstArc=arc;}}/*可发看到建立邻接表的时间复杂度为O(n+e)*/
template <class T>void ALGraph<T>::DFS(int v){cout<<adjlist[v].Vertext<<endl; visited[v]=1;ArcNode *p=adjlist[v].firstArc;while(p){int j=p->adjvex;if(visited[j]==0)DFS(j);p=p->nextarc;}}template <class T>void ALGraph<T>::BFS(int v){queue<int> q;//一个空队列cout<<adjlist[v].Vertext<<endl;visited[v]=1;q.push(v);//v入队while(!q.empty()){int h=q.front();//获取队首元素q.pop();//队首元素出队ArcNode *p=adjlist[h].firstArc;while(p){int j=p->adjvex;if(visited[j]==0){cout<<adjlist[j].Vertext<<endl;visited[j]=1;q.push(j);//元素入队}p=p->nextarc;}}}int main(){int arr[6]={0,1,2,3,4,5};ALGraph<int> *g=new ALGraph<int>(arr,6,6);cout<<"<<----------DFS-------------->>"<<endl;g->DFS(0);g->visited.assign(6,0);cout<<"<<----------BFS-------------->>"<<endl;g->BFS(0);return 0;}
- 图邻接表存储 深度优先和广度优先遍历
- 邻接表存储图,深度和广度优先遍历
- 图的深度优先和广度优先遍历算法(用邻接表作为存储结构)
- 邻接表-图的遍历-广度和深度优先遍历
- 图: 广度深度优先遍历(邻接表)
- 邻接图的广度优先遍历和深度优先遍历
- 图的邻接表存储表示 图的深度优先遍历和图的广度优先遍历
- 【图】图的邻接表存储和广度优先遍历
- 图的邻接表存储 深度优先遍历 广度优先遍历 C语言实现
- 图的邻接表存储 深度优先遍历 广度优先遍历 C语言实现
- 邻接表深度优先遍历和广度遍历
- 邻接表存储图的深度优先、广度优先遍历非递归算法
- 无向图的深度优先遍历和广度优先遍历(邻接链表)
- 邻接表实现--图的深度优先遍历DFS和广度优先遍历BFS
- 建立图的邻接表储存并实现深度优先和广度优先遍历
- 基于邻接表储存的图的深度优先和广度优先遍历
- 图(邻接表)的深度、广度优先遍历
- 邻接表的深度优先遍历以及广度优先遍历
- 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离
- 开源软件许可协议简介
- 最小生成树--Prim和Kruskal算法
- MySQL中文支持
- 串的模式匹配
- 邻接表存储图,深度和广度优先遍历
- 位图散列
- set和map
- Larbin简介,及其在Ubuntu10.04下的编译安装
- Larbin的配置和使用
- html2txt
- SCWS中文分词
- 使用Xapian搭建自己的搜索引擎
- 重装ubuntu后要做的几件事情