第一次i建图,用的邻接矩阵。
#include<stdio.h> #include<string.h> #include<string> #include<iostream> #include<algorithm> #define inf 65535 using namespace std; typedef struct mygraph { int ver[1000]; int arc[100][100]; int num_ver,num_edge; } Graph; int vis[100]; void create(Graph *G)//邻接矩阵建图 { int i,j,k; scanf("%d%d",&G->num_ver,&G->num_edge);//输入节点数和边数 for(i=0; i<G->num_ver; i++)//输入边集 scanf("%d",&G->ver[i]); for(i=0; i<G->num_ver; i++)//权值初始化 { for(j=0; j<G->num_edge; j++) G->arc[i][j]=inf; } int a,b,c; for(i=0; i<G->num_edge; i++)//输入边集 { scanf("%d%d%d",&a,&b,&c); G->arc[a][b]=c; G->arc[b][a]=c; } } void dfs(Graph *G,int i)//深搜 { int j; vis[i]=1; printf("%d ",G->ver[i]); for(j=0; j<G->num_ver; j++) if(G->arc[i][j]>0&&!vis[j])dfs(G,j); } int main() { int i,j,k; Graph myG; create(&myG); memset(vis,0,sizeof(vis)); //深搜遍历 for(i=0; i<myG.num_ver; i++) if(!vis[i])dfs(&myG,i); printf(" "); for(i=0; i<myG.num_ver; i++)//打印邻接矩阵 { for(j=0; j<myG.num_ver; j++) printf("%5d ",myG.arc[i][j]); printf(" "); } return 0; } /* 5 6 0 1 2 3 4 0 1 9 0 2 2 0 4 6 1 2 3 2 3 5 3 4 1 */测试数据中5 6代表节点数为5,边数为,6,下面是结点名0 1 2 3 4 下面几行中分别为为 弧尾(边的起点),弧首(边的终点),和边的权值