gpt4 book ai didi

c - 有向图上的 DFS

转载 作者:行者123 更新时间:2023-11-30 16:39:58 25 4
gpt4 key购买 nike

我正在有向图上实现深度优先搜索。下面是我迄今为止实现的代码,但它给出了运行时错误。在仔细检查错误时,我发现递归步骤导致了所有麻烦。我已经单独测试了所有其他步骤,它们运行正常,但是一旦我放置递归步骤,它就会给出运行时错误。输入已以邻接列表格式给出。请帮忙!

#include<stdio.h>
#include<stdlib.h>
#include<limits.h>

struct vertex{
int d,f;
int color;
int length;
int mark;
int* adj_list;
};

int time=0;

void DFS(struct vertex* v,struct vertex node,int n,int time){
v[node.mark].d=++time;
v[node.mark].color=1;
int itr=v[node.mark].length;
for(int i=0;i<itr;i++){
int curr=node.adj_list[i];
if(v[curr].color==0){
DFS(v,v[curr],n,time);
}
}
v[node.mark].f=++time;
v[node.mark].color=2;
printf("%d",node.mark);
return;
}

int main(void) {int n,num,i=0,j=0;
scanf("%d",&n);
int** list;
struct vertex* v;
v=(struct vertex*)malloc(sizeof(struct vertex)*n);

list=(int**)malloc(sizeof(int)*n);
int* nums;
nums=(int*)malloc(sizeof(int)*n);
for(i=0;i<n;i++){
nums[i]=0;
}
i=0;
do{
scanf("%d",&num);
if(num!=-1){
nums[j++]=num;
}
else if(num==-1){
v[i].length=j;
list[i]=(int*)malloc(sizeof(int)*j);
for(int k=0;k<j;k++){
list[i][k]=nums[k];
nums[k]=0;
}
i++;
j=0;
}
}while(i<n);

for(i=0;i<n;i++){
v[i].d=INT_MAX;
v[i].f=INT_MAX;
v[i].color=0;
v[i].mark=i;
v[i].adj_list=list[i];
}

for(i=0;i<n;i++){
printf("%d ",v[i].mark);
}

DFS(v,v[0],n,time);

return 0;
}

最佳答案

您的代码导致以下行缓冲区溢出:

do {
...
nums[j++]=num;
...
} while (i < n);

也许,你指的是 nums[i++]?

关于c - 有向图上的 DFS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46859339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com