图的遍历操作
答案:1 悬赏:20 手机版
解决时间 2021-11-19 03:07
- 提问者网友:做自己de王妃
- 2021-11-19 00:16
图的遍历操作
最佳答案
- 五星知识达人网友:woshuo
- 2021-11-19 00:51
#include
#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;in;i++)
for(j=0;jn;j++)
G->edges[i][j]=0;
for(k=0;ke;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;in;i++)
{for(j=0;jn;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;jn;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 visited[i]=0;
for(i=0;i {
if(!visited[i]) {
DFS(&G,i);
}
}
//是倒是,不过我一般用的时候还是会把一些大括号都打上的,或者说一些运算符顺序,打上括号比较清楚,也不会出现一些粗心问题。
return 0;
}追问我在前面有这句话typedef enum{TRUE,FALSE} Boolean;
那后面的Boolean应该可以用。
不知道为什么,我的DFS的结果就是不出来,可是你的程序就有,我还是看不出哪里错,求指教
追答void createMGraph(MGraph *G)
{
int i,j,k;
printf("n,e");
scanf("%d,%d",&G->n,&G->e);
for(i=0;in;i++)
for(j=0;jn;j++)
G->edges[i][j]=0;
printf("edges");
for(k=0;ke;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;in;i++)
{for(j=0;jn;j++)
printf("%d",G->edges[i][j]);
printf("\n");
}
}
void DFS(MGraph *G,int i)//
{
int j;
printf("%d",i);
visited[i]=TRUE;
for(j=0;jn;j++)
if (G->edges[i][j]==1 && visited[j] == FALSE)
DFS(G,j);
}
main()
{
MGraph G;
createMGraph(&G);
out(&G);
int i;//
for(i=0;i visited[i]=FALSE;//
for(i=0;i if(visited[i] == FALSE) DFS(&G,i);//这里是不是= for(i=0;i }
这里判断的时候,需要这么判断。追问改成这样就对了,我还有个问题,照这样理解typedef enum{TRUE,FALSE} Boolean;中的TRUE不是1,FALSE不是0,是这样理解吗?但是我们老师的程序就是写的!visited[i],也是能运行的,这样不就是FALSE是0了吗??
老师的:(字数限制)
Ps:我的程序里,把DFSTraverse函数写到main里面了
追答是这个顺序的问题,
TRUE = 0, FALSE = 1。 你这顺序错咯。
typedef enum{TRUE,FALSE} Boolean;
typedef enum{FALSE,TRUE} Boolean;来自:求助得到的回答
#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
for(j=0;j
G->edges[i][j]=0;
for(k=0;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
{for(j=0;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
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
for(i=0;i
if(!visited[i]) {
DFS(&G,i);
}
}
//是倒是,不过我一般用的时候还是会把一些大括号都打上的,或者说一些运算符顺序,打上括号比较清楚,也不会出现一些粗心问题。
return 0;
}追问我在前面有这句话typedef enum{TRUE,FALSE} Boolean;
那后面的Boolean应该可以用。
不知道为什么,我的DFS的结果就是不出来,可是你的程序就有,我还是看不出哪里错,求指教
追答void createMGraph(MGraph *G)
{
int i,j,k;
printf("n,e");
scanf("%d,%d",&G->n,&G->e);
for(i=0;i
for(j=0;j
G->edges[i][j]=0;
printf("edges");
for(k=0;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
{for(j=0;j
printf("%d",G->edges[i][j]);
printf("\n");
}
}
void DFS(MGraph *G,int i)//
{
int j;
printf("%d",i);
visited[i]=TRUE;
for(j=0;j
if (G->edges[i][j]==1 && visited[j] == FALSE)
DFS(G,j);
}
main()
{
MGraph G;
createMGraph(&G);
out(&G);
int i;//
for(i=0;i
for(i=0;i
这里判断的时候,需要这么判断。追问改成这样就对了,我还有个问题,照这样理解typedef enum{TRUE,FALSE} Boolean;中的TRUE不是1,FALSE不是0,是这样理解吗?但是我们老师的程序就是写的!visited[i],也是能运行的,这样不就是FALSE是0了吗??
老师的:(字数限制)
Ps:我的程序里,把DFSTraverse函数写到main里面了
追答是这个顺序的问题,
TRUE = 0, FALSE = 1。 你这顺序错咯。
typedef enum{TRUE,FALSE} Boolean;
typedef enum{FALSE,TRUE} Boolean;来自:求助得到的回答
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯