| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2696 人关注过本帖
标题:具体代码如下,运行出错,帮忙看看
取消只看楼主 加入收藏
相思豆
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2016-10-25
结帖率:50%
收藏
 问题点数:0 回复次数:3 
具体代码如下,运行出错,帮忙看看
#include "stdio.h"
#include"string.h"
#include "malloc.h"
#define OK 1
#define ERROR 0
#define FALSE 0
#define TRUE  1
#define MAX_VERTEX_NUM  20
typedef int Status;
typedef int InfoType;
typedef char VertexType;
int visited[MAX_VERTEX_NUM]={0,0,0,0};
typedef struct ArcNode//弧的结构
{
    int adjvex;
    struct ArcNode *nextarc;
    //InfoType  info;
}ArcNode;
typedef struct VNode//顶点的结构
{
    VertexType data;
    ArcNode * firstarc;
}VNode,AdjList[MAX_VERTEX_NUM];
typedef struct //图的结构
{
    AdjList vertices;
    int vexnum,arcnum;
    //int kind;
}AlGraph;

void CreateGraph(AlGraph &G)//创建邻接表
{
    printf("input vexnum and arcnum");
scanf("%d%d",&G.vexnum,&G.arcnum);
    printf("input the xinxi of vex");
    for(int i=0;i<G.vexnum;i++)//输入顶点信息
    {
        scanf("%c",&G.vertices[i].data);
        G.vertices[i].firstarc=NULL;
    }
    printf("输入弧的信息");//输入弧的信息
    for(i=0;i<G.arcnum;i++)
    {
        int tail,head;
    //    int info;
        ArcNode *p,*pnew;
        printf("输入弧尾、弧头");
        scanf("%d%d",&tail,&head);
        pnew=(ArcNode *)malloc(sizeof(ArcNode));
        pnew->adjvex=head;
        //pnew->info=info;
        pnew->nextarc=NULL;
        p=G.vertices[tail].firstarc;
        if(!p)
            G.vertices[tail].firstarc=pnew;
        else
        {
            while(p->nextarc!=NULL) p=p->nextarc;
            p->nextarc=pnew;
        }
        
    }
}
void VisitFunc(AlGraph &G,int v)//访问函数
{
    printf("%c",G.vertices[v].data);
}
int FirstAdjvex(AlGraph &G,int v)
{
    if(G.vertices[v].firstarc)
        return G.vertices[v].firstarc->adjvex;
    else
        return -1;
}
int NextAdjvex(AlGraph &G,int v,int w)//求下一个邻接点
{
    ArcNode *p;
    p=G.vertices[v].firstarc;
    while(p->adjvex!=w)
        p=p->nextarc;
    if(p->nextarc)
        return p->nextarc->adjvex;
    else
        return -1;
}
void DFS(AlGraph &G,int v)//一个节点的深度优先遍历
{
    visited[v]=TRUE;
    VisitFunc(G,v);
    for(int w=FirstAdjvex(G,v);w>=0;w=NextAdjvex(G,v,w))
        if(!visited[w])
        DFS(G,w);

}
void DFSTraverse(AlGraph &G)//图的深度优先遍历
{
    printf("深度优先遍历");
    for(int  v=1;v<=G.vexnum;v++)
    if(!visited[v])
  DFS(G,v);




}
int main()
{
    AlGraph G;
   
    CreateGraph(G);
    DFSTraverse(G);

    //BFSTraverse(G,VisitFunc);//广度优先,自己完成

        
    return 0;
}

搜索更多相关主题的帖子: include 
2016-11-17 17:09
相思豆
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2016-10-25
收藏
得分:0 
这是一个有向图的深度优先遍历的程序,运行时输入弧数,顶点数时没问题,输入弧头弧尾时会自动弹出一个框,上面写着出现正在解决的问题,然后没有结果输出了。大体情况就是这样。
2016-11-17 22:31
相思豆
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2016-10-25
收藏
得分:0 
回复 4楼 xzlxzlxzl
我按你说的试了试,还是不行,我把下面这个里的 for循环中的 v从0开始<G.vexnum就运行出来了。
void DFSTraverse(AlGraph &G)//图的深度优先遍历
{
    printf("深度优先遍历");
    for(int  v=1;v<=G.vexnum;v++)
    if(!visited[v])
  DFS(G,v);


}
2016-11-18 20:25
相思豆
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2016-10-25
收藏
得分:0 
回复 2楼 书生牛犊
你说下面的这个地方
 for(int i=0;i<G.vexnum;i++)//输入顶点信息
    {
        scanf("%c",&G.vertices[i].data); /*scanf(%c)会至少读到一个'\n',至于原因我就不详细说明了,你应该懂吧*/
        G.vertices[i].firstarc=NULL;
    }
关于scanf输入时我不太明白,但是这个程序我把那个%c改为%s之后就运行出来了。
2016-11-18 20:34
快速回复:具体代码如下,运行出错,帮忙看看
数据加载中...
 
   



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

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