C++实现图的邻接矩阵的创建以及其深度优先遍历和广度优先遍历
2014-11-01 20:42
856 查看
#include<iostream> using namespace std; typedef char vertextype; typedef int edgetype; #define maxvex 100 #define infinity 1000 #include<queue> int visited[100]; class MGraph{ public: vertextype vexs[maxvex]; edgetype arc[maxvex][maxvex]; int numvertexs,numedges;//图的顶点数目和图的边的数目 MGraph(const int &v,const int &e):numvertexs(v),numedges(e){} void creategraph();//创建图结构 void displaygraph();//显示图的结构 void DFS(int i);//深度优先遍历的子函数 void DFSTraverse(); void BFSTraverse();//定义广度遍历算法 }; void MGraph::creategraph() { cout<<"下面请输入顶点的元素类型值,输入的个数为"<<numvertexs<<endl; for(int i=0;i<numvertexs;++i) { cin>>vexs[i]; } cin.clear(); cout<<"下面请为邻接矩阵赋值,矩阵的大小为:"<<numvertexs<<"*"<<numvertexs<<endl; for(int i=0;i<numvertexs;++i) { for(int j=0;j<numvertexs;++j) { cin>>arc[i][j]; } } } void MGraph::displaygraph() { cout<<"下面输出的是顶点中的元素"<<endl; for(int i=0;i<numvertexs;++i) { cout<<vexs[i]<<" "; } cout<<endl; for(int i=0;i<numvertexs;++i) { for(int j=0;j<numvertexs;++j) { cout<<arc[i][j]<<'\t'; } cout<<endl; } } //下面定义深度优先的函数 void MGraph::DFS(int i) { int j; visited[i]=true; cout<<"深度优先输出的结点信息"<<vexs[i]<<endl; for(j=0;j<numvertexs;++j) { if(arc[i][j]==1&&!visited[j]) DFS(j); } } void MGraph::DFSTraverse() { int i; for(i=0;i<numvertexs;++i) { visited[i]=0; } for(i=0;i<numvertexs;++i) { if(!visited[i]) DFS(i); } } void MGraph::BFSTraverse() { int i,j; queue<int> q; for(i=0;i<numvertexs;++i) visited[numvertexs]=0; for(i=0;i<numvertexs;++i) { if(!visited[i]) { visited[i]=1; cout<<"广度遍历的结点的信息为"<<vexs[i]<<endl; q.push(i); while(!q.empty()) { int k; k=q.front(); q.pop(); for(j=0;j<numvertexs;++j) { if(arc[i][j]==1&&!visited[j]) { visited[j]=1; cout<<"广度遍历的结点的信息为"<<vexs[i]<<endl; q.push(j); } } } } } } int main() { MGraph G(4,5); G.creategraph(); G.displaygraph(); //G.DFSTraverse(); G.BFSTraverse(); system("pause"); return 0; }
相关文章推荐
- 【数据结构】拾遗(一):图的邻接矩阵创建以及其深广度遍历C++实现
- 邻接矩阵的深度优先遍历(递归以及非递归),广度优先遍历
- 二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]
- 图的创建以及深度与广度优先遍历C/C++
- 二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]
- 二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]
- 邻接矩阵实现--图的深度优先遍历DFS和广度优先遍历BFS
- 二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]
- C++实现图的邻接矩阵存储和广度、深度优先遍历实例分析
- 二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]
- 二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]
- 二叉树的深度优先遍历与广度优先遍历 [C++实现]
- 二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]
- 二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]
- 二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]
- 二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]
- C++非递归队列实现二叉树的广度优先遍历
- C++编程练习(9)----“图的存储结构以及图的遍历“(邻接矩阵、深度优先遍历、广度优先遍历)
- 图的广度优先遍历BFS(分别以邻接矩阵和邻接链表实现)
- 二叉树的深度优先遍历以及广度优先遍历