#include<iostream> using namespace std; typedef char vertextype; typedef int edgetype; #define maxvex 100 #define infinity 1000 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 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); } } int main() { MGraph G(4,5); G.creategraph(); G.displaygraph(); G.DFSTraverse(); system("pause"); return 0; }
时间: 2024-10-31 15:25:43