Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 图dfs遍历的邻接列表表示法不起作用。为什么?_C - Fatal编程技术网

C 图dfs遍历的邻接列表表示法不起作用。为什么?

C 图dfs遍历的邻接列表表示法不起作用。为什么?,c,C,在此邻接列表程序中,dfs遍历不起作用。图片是预期的输出。忽略图片中的检查连接。我得到了错误的输出。可能是语义错误。请帮助更正。。它可能在某个地方出错。 我不知道它在哪里。请帮我找到它。我已经包括了预期的输出,所以它更容易 [ //邻接列表表示的实现 ˚. #包括 #包括 #定义最大节点50 类型定义结构节点 { int数据; 结构节点*链接; }图形; void insert_节点(图**nodep,int i,int j) { 图形*cur; 图表*温度; temp=(图*)malloc(

在此邻接列表程序中,dfs遍历不起作用。图片是预期的输出。忽略图片中的检查连接。我得到了错误的输出。可能是语义错误。请帮助更正。。它可能在某个地方出错。 我不知道它在哪里。请帮我找到它。我已经包括了预期的输出,所以它更容易

[

//邻接列表表示的实现
˚. 
#包括
#包括
#定义最大节点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;iIn
dfs
,您更新了
已访问的
,但它是一个本地数组,每个递归都不同。您要更改
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