图的遍历操作
发布网友
发布时间:2022-04-24 15:10
我来回答
共1个回答
热心网友
时间:2023-10-18 07:02
#include<stdio.h>
#define max 20
typedef enum{TRUE,FALSE} Boolean;
typedef struct
{
int n,e;
int edges[max][max];
char vexs[max];
}MGraph;
bool visited[max]; //主要是这里的问题
void createMGraph(MGraph *G)
{
int i,j,k;
printf("n,e\n");
scanf("%d,%d",&G->n,&G->e);
for(i=0;i<G->n;i++)
for(j=0;j<G->n;j++)
G->edges[i][j]=0;
for(k=0;k<G->e;k++)
{
scanf("%d,%d",&i,&j);
G->edges[i][j]=1;G->edges[j][i]=1;
}
}
void out(MGraph *G)
{
int i,j;
for(i=0;i<G->n;i++)
{for(j=0;j<G->n;j++)
printf("%d",G->edges[i][j]);
printf("\n");
}
}
void DFS(MGraph *G,int i)
{
int j;
printf("%d\n",i);
visited[i]=true;
for(j=0;j<G->n;j++)
if (G->edges[i][j]==1 && !visited[j])
DFS(G,j);
}
int main()
{
MGraph G;
createMGraph(&G);
out(&G);
int i;
for(i=0;i<G.n;i++)
visited[i]=0;
for(i=0;i<G.n;i++)
{
if(!visited[i]) {
DFS(&G,i);
}
}
//是倒是,不过我一般用的时候还是会把一些大括号都打上的,或者说一些运算符顺序,打上括号比较清楚,也不会出现一些粗心问题。
return 0;
}