大家帮忙!图 连通分量问题
#include<stdio.h>#include<stdlib.h>
#define MAX 20
typedef struct
{ int vexs [MAX];
int arcs[MAX][MAX];
int vexnum,arcnum;
}mgraph;
int visited[MAX ]={0};
int locate(mgraph G,int z)
{
int i=0;
while(G.vexs[i]!=z)
{
i++;
}
return i;
}
void create(mgraph &G)
{
int i,j,k,v1,v2;
printf("请输入顶点数和边数:");
scanf("%d %d",&G.vexnum ,&G.arcnum);
printf("请输入顶点值:");
for (i=0;i<G.vexnum;i++)
scanf("%d",&G.vexs[i]);
for (i=0;i< G.vexnum;i++)
for (j=0;j<G.vexnum;j++)
G.arcs[i][j]=0;
printf("请输入每条边的两个顶点:");
for (k=0;k<G.arcnum;k++)
{
scanf("%d %d",&v1,&v2);
i=locate(G,v1); j=locate(G,v2);
G.arcs[i][j]=G.arcs[j][i]=1;
}
}
int firstadj(mgraph G,int v)
{
int i;
for(i=0;i<G.vexnum;i++)
if(G.arcs[v][i]) return i;
return -1;
}
int nextadj(mgraph G,int v,int w)
{
for(w=v+1;w<G.vexnum;w++)
if(G.arcs[v][w]) return w;
return -1;
}
void dfs(mgraph G,int v)
{
int w;
printf("%d ",G.vexs[v]);
visited[v]=1;
for(w=firstadj(G,v);w>=0;w=nextadj(G,v,w))
if ( !visited[w] ) {dfs(G,w);}
}
int dfstraverse(mgraph G)
{
int v,n=0;
for (v=0;v<G.vexnum;v++)
if (!visited[v]) {dfs(G,v);n++;}
return n;
}
int main()
{
int n;
mgraph G;
create(G);
printf("其深度优先序列为:");
n=dfstraverse(G);
printf("%d",n);
return 0;
}
为什么 printf("%d",n);
return 0;
没有执行出来?