#include <iostream> #define MaxVerNum 100 typedef char ElemType; using namespace std; typedef struct { ElemType vexs[MaxVerNum]; int arcs[MaxVerNum][MaxVerNum]; int vernum, arcnum; }AMGraph; int LocateVex(AMGraph G,ElemType v) { for(int i=0;i<G.vernum;i++) { if(G.vexs[i]==v) return i; } } void CreateUDG(AMGraph &G) { int i,j,k; ElemType v1,v2; cout<<"请依次输入图的顶点数和边数!\n"; cin>>G.vernum >>G.arcnum; for (i=0;i<G.vernum;i++){ cout<<"请输入顶点值;\n"; cin>>G.vexs[i]; } for (i=0;i< G.vernum;i++) for (j=0;j<G.vernum;j++) G.arcs[i][j]=0; for (k=1;k<=G.arcnum;k++) { cout<<"请输入一条边;\n"; cin>>v1>>v2; i=LocateVex(G,v1);j=LocateVex(G,v2); G.arcs[i][j]=G.arcs[j][i]=1; } } bool visited[MaxVerNum]; int e=0; void DFS(AMGraph G,int v) { int w; cout<<G.vexs[v]; visited[v]=true; for ( w=0; w<G.vernum; w++ ) { if(G.arcs[v][w]==1) e++; if(G.arcs[v][w]==1&&!visited[w]) DFS(G,w); } } void DFSTraverse(AMGraph G) { int v=0; for (v=0;v<G.vernum;v++) visited[v]=false; for (v=0;v<G.vernum;v++) if (!visited[v]) { DFS(G,v); } } int DFSTraverse1(AMGraph G) { int k=0,v; for (v=0;v<G.vernum;v++) visited[v]=false; for (v=0;v<G.vernum;v++) if (!visited[v]) { k++; DFS(G,v); } e=e/2; return k; } int main() { AMGraph G; int m; CreateUDG(G); cout<<"该图按深度优先序列输出为;"; m=DFSTraverse1(G); cout<<"\n该图的连通分量数为;"<<m; cout<<"\n该图的边数为;"<<e; }
【数据结构】以邻接矩阵作存储结构,求连通分量的个数,设计算法求图G的深度,深度优先序列输出
猜你喜欢
转载自blog.csdn.net/tf1997/article/details/78523459
今日推荐
周排行