| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1436 人关注过本帖
标题:这个有向图的深度优先遍历 怎么是这样的啊 哪里有问题
只看楼主 加入收藏
fan19980613
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2016-11-12
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
这个有向图的深度优先遍历 怎么是这样的啊 哪里有问题
#include<stdio.h>
#include<stdlib.h>
#define MaxVertexNum 100
typedef char VertexType;
typedef int EdgeType;

typedef struct node
{
    int adjvex;
    struct node *next;
}EdgeNode;
typedef struct vnode
{
    VertexType vertex;
    EdgeNode * firstedge;
}VertexNode;
typedef struct
{
    VertexNode adjlist[MaxVertexNum];
    int n,e;

}ALGraph;
int visited[MaxVertexNum]={0};
//有向图的邻接表存储
 ALGraph *creatgraph(ALGraph *G)
{
    int i,j,k;
    EdgeNode *s,*q,*p;
    G=(ALGraph*)malloc(sizeof(ALGraph));
    printf("请输入顶点数和边数(顶点数 边数):\n");
    scanf("%d %d",&(G->n),&(G->e));
    printf("请输入顶点信息):\n");
    for(i=0;i<G->n;i++)
    {
      getchar();
        scanf("%c",&(G->adjlist[i].vertex));
        G->adjlist[i].firstedge=NULL;
    }
    printf("请输入边的信息(格式:i j):\n");
    for(k=0;k<G->e;k++)
    {
        scanf("%d %d",&i,&j);
        s=(EdgeNode *)malloc(sizeof(EdgeNode));
        s->adjvex=j;
       s->next=NULL;
        p=G->adjlist[i-1].firstedge;
        s->next=p;
        G->adjlist[i-1].firstedge=s;

    }

    return G;

}
void DFSAL(ALGraph *G,int i)
{
    EdgeNode *p;
    printf("%c\n",G->adjlist[i].vertex);
    visited[i]=1;
    p=G->adjlist[i].firstedge;
    while(p!=NULL)
    {
        if(visited[p->adjvex-1]==0)
        {
            DFSAL(G,p->adjvex-1);
        }

        p=p->next;

    }
}
//以邻接表为存储结构的图G的深度优先遍历
void DFSTraverseAL(ALGraph *G)
{
    int i;
    int visited[MaxVertexNum];
    for(i=0;i<G->n;i++)
    {
        visited[i]=0;
    }

    for(i=0;i<G->n;i++)
        {
            if(visited[i]==0)
        DFSAL(G,i);
        }
}
void main()
{
    ALGraph *G;
    EdgeNode *p;
    int i;
    G=creatgraph(G);
    printf("创建的邻接表是:\n");
    for(i=0;i<G->n;i++)
    {
        p=G->adjlist[i].firstedge;
        printf("ok:%c ",G->adjlist[i].vertex);
     while(p!=NULL)
        {
            printf("%d ",p->adjvex);
            p=p->next;
        }
        printf("\n");
    }

     printf("图的深度优先遍历:\n");
    DFSTraverseAL(G);

}
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 深度 int next printf for 
2017-12-06 15:44
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:20 
void DFSTraverseAL(ALGraph *G)
{
    int i;
    //int visited[MaxVertexNum];
    for(i=0;i<G->n;i++)
    {
        visited[i]=0;
    }

    for(i=0;i<G->n;i++)
        {
            if(visited[i]==0)
        DFSAL(G,i);
        }
}

嗯,所以说全局变量和局部变量重名容易出现理解性偏差~去掉一行代码就可以了~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-12-06 19:09
快速回复:这个有向图的深度优先遍历 怎么是这样的啊 哪里有问题
数据加载中...
 
   



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

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