//邻接矩阵表示图广度优先,深度优先 #include <iostream> #include <queue> /*gragh.txt 8 9ABCDEFGH 0 1 1 0 2 1 1 3 1 1 4 1 3 7 1 4 7 1 2 5 1 2 6 1 5 6 1 */ #include <fstream> #define MaxVertex 100//最大顶点数 using namespace std; int visited[MaxVertex]; //不用在初始化,因为写在main外默认为0、 int visited1[MaxVertex]; struct MGraph { char vexs[MaxVertex]; int edges[MaxVertex][MaxVertex]; int vexnum,edgnum; }; //无向图邻接矩阵建立算法 void CreatMGraph(MGraph *G) { int i,j,k,w; cin>>G->vexnum>>G->edgnum;//读入顶点数和边数 for(i=0;i<G->vexnum;i++)//读入顶点信息 cin>>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 { cin>>i>>j>>w; G->edges[i][j]=w; } } //广度优先遍历。 void MGraphBFS(MGraph *G,int i) { queue<int> q; //用到队列 int x,j; if(!visited[i]) { cout<<G->vexs[i]; visited[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]&&!visited[j]) { cout<<G->vexs[j]; visited[j]=1; q.push(j); } } } void MGraphDFS(MGraph *G,int i) { int j; if(!visited1[i]) { cout<<G->vexs[i]; visited1[i]=1; } for(j=0;j<G->vexnum;j++)//递归 if(G->edges[i][j]&&!visited1[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; return 0; } Output: