有关图的深度优先遍历问题

#include
#include
#define max 20
typedef struct node
{
int tail,head;//弧尾、弧头对应的顶点在数组的位置
struct node t,*h;//弧尾、弧头相同的下一条弧
}link;
typedef struct
{
char name;//顶点名字
struct node *in,*out;//第一条入弧和出弧
}point;
typedef struct
{
point GL[max];
int nexnum,arcnum;//顶点数,边数
}sum;
int get(sum *p,char v1)
{
int i;
for(i=0;inexnum;i++)
{
if(v1==p->GL[i].name)return i;
}
}
int visit[max];
sum
creat()
{
char v1,v2;
int x,z1,z2;
sum i;
link *t;
if(!(i=(sum
)malloc(sizeof(sum))))exit(1);
printf("请输入顶点的个数(小于20)\n");
scanf("%d",&i->nexnum);
printf("请输入顶点的名字\n");fflush(stdin);
for(x=0;xnexnum;x++)
{scanf("%c",&i->GL[x].name);i->GL[x].in=i->GL[x].out=NULL;fflush(stdin);}
printf("请输入边的个数\n");
scanf("%d",&i->arcnum);
printf("请输入个边的信息(弧尾,弧头)\n");
for(x=0;xarcnum;x++)
{
fflush(stdin);
scanf("%c,%c",&v1,&v2);
z1=get(i,v1);z2=get(i,v2);
if(!(t=(link*)malloc(sizeof(link))))exit(1);
t->tail=v1;t->head=v2;t->t=i->GL[z1].out;t->h=i->GL[z2].in;
i->GL[z1].out=i->GL[z2].in=t;
}
return i;
}
int next(sum *p,int i)
{
link *t=p->GL[i].out;
int x;
while(t)
{
x=t->head;
if(!visit[x])return x;
else
{
t=t->t;
}
}
return -1;
}
void dfs(sum *p,int i)
{
int w;
visit[i]=1;
printf("%c",p->GL[i].name);
for(w=next(p,i);w;w=next(p,i))
{
if(!visit[w])dfs(p,w);
}
}
void show(sum *p)
{
int i;
for(i=0;inexnum;i++)visit[i]=0;
for(i=0;inexnum;i++)
{
if(!visit[i])dfs(p,i);
}
}
int main()
{
sum *p;
p=creat();
show(p);
}
为什么输出不了,搞了一天了、、、、求大神们帮忙看看

1个回答

先学会调试,通过调试缩小问题的范围,而不是一上来丢一个乱七八糟的程序就等着收结果。与其这样,干脆不要写程序了,网上正确的程序多的是。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐