yzlee_1991 2015-02-01 07:04 采纳率: 0%
浏览 1661

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

#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条回答

  • threenewbee 2015-02-01 07:09
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突