| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 778 人关注过本帖
标题:数据结构判断是否连通 苦逼2小时没结果 求大神
只看楼主 加入收藏
GUnever
Rank: 2
等 级:论坛游民
帖 子:59
专家分:25
注 册:2012-3-3
结帖率:95.24%
收藏
已结贴  问题点数:20 回复次数:4 
数据结构判断是否连通 苦逼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那里就会遇到 不知道怎么解决 所以自己不能调程序! 求大神 万分感谢
搜索更多相关主题的帖子: head include 
2012-12-12 21:53
w527705090
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:11
帖 子:441
专家分:1882
注 册:2011-6-28
收藏
得分:0 
帮顶好了。。。

有心者,千方百计;无心者,千难万难。
2012-12-12 21:55
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:20 
程序代码:
for(k=0;str1[k]!='\0';k++)
        {
            c=str1[i];  //在k循环中用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;
        }

其他地方没怎么看,还有没有错误不知道,但是我觉得是不是可以直接带入head
 initpicture(&head);
head本身就是一个结构的地址,还加个&好像有点找岔的感觉...

I have not failed completely
2012-12-12 22:16
GUnever
Rank: 2
等 级:论坛游民
帖 子:59
专家分:25
注 册:2012-3-3
收藏
得分:0 
诶··那里我写的是i居然读入数据还是正确的··太奇怪了  谢了
  还有那个head 应为我的初始化函数是接受的指针的指针 所以给的是地址的地址
2012-12-13 09:43
GUnever
Rank: 2
等 级:论坛游民
帖 子:59
专家分:25
注 册:2012-3-3
收藏
得分:0 
找到错误了 谢谢上面的 大神 就是K 的笔误  但是改了这个还有一个严重的问题就是 我用C 一个一个来接受gets的字符 然后后来又用C来做加减法 其剪出来应该是ASCLL码 把他弄成了int的减法  导致邻接链表都没对!!
2012-12-13 10:11
快速回复:数据结构判断是否连通 苦逼2小时没结果 求大神
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019180 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved