C 图dfs遍历的邻接列表表示法不起作用。为什么?
在此邻接列表程序中,dfs遍历不起作用。图片是预期的输出。忽略图片中的检查连接。我得到了错误的输出。可能是语义错误。请帮助更正。。它可能在某个地方出错。 我不知道它在哪里。请帮我找到它。我已经包括了预期的输出,所以它更容易 [C 图dfs遍历的邻接列表表示法不起作用。为什么?,c,C,在此邻接列表程序中,dfs遍历不起作用。图片是预期的输出。忽略图片中的检查连接。我得到了错误的输出。可能是语义错误。请帮助更正。。它可能在某个地方出错。 我不知道它在哪里。请帮我找到它。我已经包括了预期的输出,所以它更容易 [ //邻接列表表示的实现 ˚. #包括 #包括 #定义最大节点50 类型定义结构节点 { int数据; 结构节点*链接; }图形; void insert_节点(图**nodep,int i,int j) { 图形*cur; 图表*温度; temp=(图*)malloc(
//邻接列表表示的实现
˚.
#包括
#包括
#定义最大节点50
类型定义结构节点
{
int数据;
结构节点*链接;
}图形;
void insert_节点(图**nodep,int i,int j)
{
图形*cur;
图表*温度;
temp=(图*)malloc(sizeof(图));
温度->数据=j;
temp->link=NULL;
cur=nodep[i];
如果(cur==NULL)
nodep[i]=温度;
其他的
{
while(cur->link!=NULL)
cur=cur->link;
cur->link=temp;
}
}
void initvisted(int*visted,int n)
{
for(int i=1;ilink)
{
adj=p->data;
如果(访问[adj]==0)
dfs(nodep,adj,v);
}
}
无效创建图(图**nodep)
{
int i,j;
而(1)
{
printf(“输入源节点和目标节点”);
scanf(“%d%d”、&i和&j);
如果(i==0&&j==0)
打破
插入_节点(nodep,i,j);
}
}
无效显示(图形**nodep,int n)
{
int i;
图形*cur;
对于(i=1;idata);
cur=cur->link;
}
}
}
int main()
{
int i;
int n,ch;
国际访问[40];
int源;
图*节点列表[maxnodes];
printf(“在图中输入节点数”);
scanf(“%d”和“&n”);
对于(i=1;iIndfs
,您更新了已访问的
,但它是一个本地数组,每个递归都不同。您要更改main
中的数组,因此必须传递它。(最好创建一个图形结构,将所有相关信息(顶点数、vistied标志和邻接列表)保存在一起,并将指向该结构的指针传递给每个函数。)
//implementation of adjacency list representation
˚.
#include<stdio.h>
#include<stdlib.h>
#define maxnodes 50
typedef struct node
{
int data;
struct node *link;
}graph;
void insert_node(graph **nodep,int i,int j)
{
graph *cur;
graph *temp;
temp=(graph *)malloc(sizeof(graph));
temp->data=j;
temp->link=NULL;
cur=nodep[i];
if(cur==NULL)
nodep[i]=temp;
else
{
while(cur->link!=NULL)
cur=cur->link;
cur->link=temp;
}
}
void initvisited(int *visited,int n)
{
for(int i=1;i<=n;i++)
visited[i]=0;
}
void dfs(graph **nodep,int v,int n)
{
int visited[40];
visited[v]=1;
int adj;
printf("%d \n",v);
for(graph *p=nodep[v];p!=NULL;p=p->link)
{
adj=p->data;
if(visited[adj]==0)
dfs(nodep,adj,v);
}
}
void create_graph(graph **nodep)
{
int i,j;
while(1)
{
printf("enter source and destination nodes");
scanf("%d %d",&i,&j);
if(i==0 && j==0)
break;
insert_node(nodep,i,j);
}
}
void display(graph **nodep,int n)
{
int i;
graph *cur;
for(i=1;i<=n;i++)
{
cur=nodep[i];
printf("\n the nodes adjacent to node %d are=",i);
while(cur!=NULL)
{
printf("\t%d",cur->data);
cur=cur->link;
}
}
}
int main()
{
int i;
int n,ch;
int visited[40];
int source;
graph *nodelist[maxnodes];
printf("enter number of number of nodes in the graph");
scanf("%d",&n);
for(i=1;i<=n;i++)
nodelist[i]=NULL;
while(1)
{printf("\nenter option 1.create graph 2.display 3.dfs 4.exit");
scanf("%d",&ch);
switch(ch)
{
case 1:create_graph(nodelist);
break;
case 2:display(nodelist,n);
break;
case 4:exit(0);
break;
case 3:
initvisited(visited,n);
printf("enter source node");
scanf("%d",&source);
dfs(nodelist,source,n);
for(int i=1;i<=n;i++)
if(visited[i]==0)
dfs(nodelist,i,n);
break;
default:
break;
}
}
}
[1]: https://i.stack.imgur.com/EnecW.png