#include<stdio.h>
#include<stdlib.h>
#define MAXNUM 20
typedef struct ArcNode{
int hvex,tvex;
struct ArcNode*hlink,*tlink;
}ArcNode;
typedef struct VertexNode{
int data;
ArcNode*firstin,*firstout;
}VertexNode;
typedef struct{
VertexNode vertex[MAXNUM];
int vexnum,arcnum;
}OrthList;
int visit[MAXNUM];
void CreateOrthList(OrthList*L)//创建十字链表
{
int k,i,j,n,m;
ArcNode*q;
scanf("%d %d",&n,&m);
L->vexnum=n,L->arcnum=m;
for(k=0;k<n;k++)
{
scanf("%d",&(L->vertex[k].data));
L->vertex[k].firstin=NULL;
L->vertex[k].firstout=NULL;
}
for(k=0;k<m;k++)
{
scanf("%d %d",&i,&j);
q=(ArcNode*)malloc(sizeof(ArcNode));
q->hvex=i;
q->tvex=j;
q->tlink=L->vertex[i].firstout;
L->vertex[i].firstout=q;
q->hlink=L->vertex[j].firstin;
L->vertex[j].firstin=q;
}
}
ArcNode*FirstAdjVertex(VertexNode*q)//得到当前顶点首个邻接边
{
return q->firstout;
}
ArcNode* NextAdjVertex(ArcNode*w)//得到当前顶点下一个邻接边
{
return w->tlink;
}
void DepthFirstSearch(OrthList*L,int vi)//深度优先搜索
{
ArcNode*w;
visit[vi]=1;
w=FirstAdjVertex(&(L->vertex[vi]));
while(w)//!!不知为何当递归到v1为4时还能进入while语句
{
if(!visit[w->tvex])DepthFirstSearch(L,w->tvex);
w=w->tlink;
}
}
void TraverseGraph(OrthList*L,int v0)//遍历顶点
{
for(int i=0;i<L->vexnum;i++) visit[i]=0;
DepthFirstSearch(L,v0);
}
int main()
{
OrthList L;
int v0,v1;
CreateOrthList(&L);
scanf("%d %d",&v0,&v1);
TraverseGraph(&L,v0);
if(visit[v1])printf("yes");
else printf("no");
return 0;
}
我的输入是:
4 4
1 2 3 4
1 2
2 3
3 4
3 1
1 4
在第55行左右出现Program received signal SIGSEGV, Segmentation fault
调试发现visit数组没有问题,是可以正确输出的
但不该进的while语句却进了
555求dl解答~
我解决了!!!
把OrthList L定义为全局变量,也就是放在main函数外
不过这是为啥呢有无好心的dl解释
你把 w 打印出来看是什么值不就知道?
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632