#include <iostream> #include <queue> #include <fstream> #define MaxVertex 100//最大顶点数 using namespace std; int visited[MaxVertex]; int visited1[MaxVertex]; ifstream cin1("Graph.txt"); struct MGraph { char vexs[MaxVertex]; int edges[MaxVertex][MaxVertex]; int vexnum,edgnum; }; //无向图邻接矩阵建立算法 void CreatMGraph(MGraph *G) { int i,j,k,w; cin1>>G->vexnum>>G->edgnum;//读入顶点数和边数 for(i=0;i<G->vexnum;i++)//读入顶点信息 cin1>>G->vexs[i]; for(i=0;i<G->vexnum;i++)//邻接矩阵初始化 for(j=0;j<G->vexnum;j++) G->edges[i][j]=0; for(k=0;k<G->edgnum;k++)//输入边(i,j)上的权值w { cin1>>i>>j>>w; G->edges[i][j]=w; //无向图是对称的 i->j 和 j->i 是一样的 G->edges[j][i]=w; } } void MGraphBFS(MGraph *G,int i) { queue<int> q; int x,j; if(!visited1[i]) { cout<<G->vexs[i]; visited1[i]=1; q.push(i); } while(!q.empty()) { x=q.front();//取队头 q.pop();//出队 for(j=0;j<G->vexnum;j++) if (G->edges[x][j]&&!visited1[j]) { cout<<G->vexs[j]; visited1[j]=1; q.push(j); } } } void MGraphDFS(MGraph *G,int i) { int j; if(!visited[i]) { cout<<G->vexs[i]; visited[i]=1; } for(j=0;j<G->vexnum;j++) { if (G->edges[i][j]&&!visited[j]) { MGraphDFS(G,j); } } } void PrintMGraph(MGraph *G) { int j,i; for(i=0;i<G->vexnum;i++)//邻接矩阵初始化 { for(j=0;j<G->vexnum;j++) cout<<G->edges[i][j]<<" "; cout<<endl; } } int main() { MGraph *G=new MGraph; CreatMGraph(G); cout<<"输出邻接矩阵/n"; PrintMGraph(G); cout<<"广度优先遍历/n"; MGraphBFS(G,0); cout<<endl; cout<<"深度优先遍历/n"; MGraphDFS(G,0); cout<<endl; delete G; return 0; }