数据结构判断是否连通 苦逼2小时没结果 求大神
#include<stdio.h>#include<conio.h>
#include<malloc.h>
#define MAX 100
typedef struct node
{
int shuzu;
struct node*next;
}
node;
typedef struct picture
{
char data;
struct node* first;
}
picture;
int n=0,v,e;
int flag[10]; //ziduo 9
void initpicture(picture**head)
{
int i,j,k,c;
char str1[20];
picture*p;
node *q,*q1;
printf("请输入图的节点数和边数,用逗号隔开\n");
scanf("%d,%d",&v,&e);
getchar();
*head=p=(picture*)malloc(v*sizeof(picture));
printf("请输入每个图所存放的信息:\n");
for(i=1;i<=v;i++)
{
printf("请输入第%d个图的字符信息\n",i); //*head[i] 一定要记住【】就相当于表示了一个* []貌似不能表示空间的下标
scanf("%c",&(p[i-1].data));
getchar(); //问下换成head就不行
}
printf("请将您的图进行编号并准确描述您的图的每个节点与其他节点相关系和节点数据\n");
for(j=1;j<=v;j++,p++)
{
printf("第%d个节点的与哪些节点相连?,直接连续输入其编号,若为没有连接则输入0\n",j);
gets(str1);
for(k=0;str1[k]!='\0';k++)
{
c=str1[i];
if(c==0)
{
p->first=NULL;
continue;
}
q=(node*)malloc(sizeof(node));
q->shuzu=c-1;
if(k==0)
{
p->first=q;
}
else
{
q1->next=q;
}
q1=q;
}
q1->next=NULL;
}
}
void ceshi(picture *head)
{
int i;
for(i=0;i<v;i++)
{
printf("%c",head[i].data);
}
}
void DFS(picture*head,int i)
{
node *p;
flag[i]=1;
for(p=head[i].first;p!=NULL;p=p->next)
{
if(!flag[p->shuzu])
{
n++;
printf("qwe");
DFS(head,p->shuzu);
}
}
}
void bianli(picture*head)
{
int i;
for(i=0;i<=v;i++)
{
flag[i]=0;
}
n++;
printf("qwe");
DFS(head,0);
if(n==v)
{
printf("图连通");
}
else
printf("不是一个连通图!%d",n);
}
void main()
{
picture *head;
initpicture(&head);
ceshi(head);//这个函数大家可以不用管
bianli(head);
}
这是自己写的一个判断图是否连通的代码。 我的主要思想是先用邻接链表来存储用户建立的一个图 图的输入可以详见代码
然后我用深度遍历来判断图是否连通。printf(“qwe”)是我用来判断函数到底执行几次 用来调程序看的 每次输入图的时候遍历只会输出两个qwe非常的奇怪
看了很久代码很是不解! 求高手 自己调程序总是遇到find source 就在第一个printf那里就会遇到 不知道怎么解决 所以自己不能调程序! 求大神 万分感谢