| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
买学问 - 大牛一对一辅导,有问必答买学问 - 专业的付费知识问答平台
共有 506 人关注过本帖
标题:关于图的深度优先遍历的算法,我找出问题了,帮我改改。
只看楼主 加入收藏
请大师指点
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:3
帖 子:6
专家分:20
注 册:2018-9-13
  问题点数:0  回复次数:1   
关于图的深度优先遍历的算法,我找出问题了,帮我改改。
#include<stdio.h>
#include<stdlib.h>

#define Max 10

typedef int vertextype;
typedef struct arcnode{
    int adjvex;
    int info;
    struct arcnode *next;
}arcnode;
typedef struct vnode{
    vertextype data;
    struct arcnode * firstarc;//边表的转换类型哦 对应类型;
}vnode;
typedef struct{
    vnode adjlist[Max];
    int arcnum,vernum;
}Algraph;

int visited[Max+1];//辅助数组记录未被访问的节点

void creat_Algraph(Algraph *g);
int locatevex(Algraph *g,vertextype);
void display_adjacency(Algraph *g);
void DFSTraver(Algraph g);
void DFS(Algraph g, int v);







void main()
{
    Algraph g;
    creat_Algraph(&g);
    display_adjacency(&g);
    printf("接下来演示图的遍历:\n");
    printf("depth first search:");
    DFSTraver(g);
}


int locatevex(Algraph *g,vertextype v)
{
    int i;
    for(i=0;i<g->vernum;i++)
        if(g->adjlist[i].data==v)
            return i;
        return -1;
}

void creat_Algraph(Algraph *g)
{
    int n,e,i,vi,vj,l,m;
    arcnode *k;
    printf("请输入顶点数和边数(空格区分):");
    scanf("%d %d",&n,&e);
    g->arcnum=e;g->vernum=n;
    for(i=0;i<g->vernum;i++)
    {   
       printf("请输入图的第%d顶点信息(整型):",i+1);
       scanf("%d",&g->adjlist[i].data);
       g->adjlist[i].firstarc=NULL;
    }
    printf("请输入边的信息:\n");
    for(i=0;i<g->arcnum;i++)
    {
        printf("请输入第%d边上(vi,vj)上的顶点序号(空格区分):\n",i+1);
        scanf("%d %d",&vi,&vj);
        getchar();                                     //有必要用头插法去链接 Fistarc,数据本身就没有顺序可言;
        l=locatevex(g,vi);                          //!!定位的正确连接点
        m=locatevex(g,vj);
        if(l>=0&&m>=0)
        {
          k=(arcnode*)malloc(sizeof(arcnode));
          k->adjvex=m;////m+1
          k->next=g->adjlist[l].firstarc;
          g->adjlist[l].firstarc=k;
        }
    }
}

void display_adjacency(Algraph *g)
{
    int i;
    arcnode *k;
    printf("图的邻接表 显示:\n");
    for(i=0;i<g->vernum;i++)
    {
        printf("\n%4d",g->adjlist[i].data);
        k=g->adjlist[i].firstarc;
        while(k!=NULL)
        {
            printf("-->%d",k->adjvex);
            k=k->next;
        }
    }
    printf("\n");
}

void DFSTraver(Algraph g)
{
  int i;
  for(i=0;i<g.vernum;i++)
      visited[i]=0;
  for(i=0;i<g.vernum;i++);
      if(!visited[i])
          DFS(g,i);
}

void DFS(Algraph g ,int v)
{
    arcnode *p;
    printf("%5d\n",g.adjlist[v].data);//(1)这里有问题
    visited[v]=1;
    p=g.adjlist[v].firstarc;
    while(p)
    {   
        if(!visited[p->adjvex])//(2)这里有问题
            DFS(g,p->adjvex);
        p=p->next;
    }
}
2018-09-20 16:04
请大师指点
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:3
帖 子:6
专家分:20
注 册:2018-9-13
  得分:0 
我弄出来了  卡BUGEG了
附件: 您没有浏览附件的权限,请 登录注册
2018-09-20 19:25







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

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