回 帖 发 新 帖 刷新版面

主题:关于图的建立和深度遍历的问题

#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#define MAX 30
#define NULL 0
typedef struct ArcNode
{
    int adjvex;
    struct ArcNode *nextarc;
}ArcNode;
typedef struct VNode
{
    char data;
    ArcNode *firstarc;
}VNode,Graph[MAX];
//typedef AdjList Graph;
int n;
int visted[MAX];
int getid(Graph G,char c)
{
    int i;
    for(i=0;i<n;i++)
        if(G[i].data==c)
            return(i);
        
}

void creatGraph(Graph &G)
{
    char q,b;
    ArcNode *p;
    int i,j,k,m;
    printf("请输入结点的个数和边的个数:\n");
    scanf("%d%d",&n,&j);
    for(i=0;i<n;i++)
    {
        printf("请输入第%d个结点的信息:\n",i+1);
        scanf("%c",&G[i].data);
            G[i].firstarc=NULL;
    }
    printf("输入边的顶点对:\n");
    for(i=0;i<j;i++)
    {
      printf("请输入第%d边的顶点对次序为弧尾和弧头:\n",i+1);
        scanf("%c%c",&q,&b);
        k=getid(G,q);
        m=getid(G,b);
        p=(ArcNode *)malloc(sizeof(ArcNode));
        p->adjvex=m;
        p->nextarc=G[k].firstarc;
        G[k].firstarc=p;
    }
}
/*int FirstAdjvex(Graph G,int v)
{
    ArcNode *p;
    p=G[v].firstarc;
    if(p)
    return(p->adjvex);
    else 
        return(-1);
}
int NextAdjvex(Graph G,int v,int w)
{
    ArcNode *p;
        p=G[v].firstarc;
        while(p&&p->adjvex!=w)
            p=p->nextarc;
        if(p->nextarc==NULL)
            return(-1);
        else
        {
            p=p->nextarc;
            return(p->adjvex);
        }
}

void biaoji()
{
    int i=0;
    for(i=0;i<n;i++)
        visted[i]=0;
}
void DFS(Graph G,int v)
{
    int w;
    printf("%5c",G[v].data);
    visted[v]=1;
    for(w=FirstAdjvex(G,v);w>=0;w=NextAdjvex(G,v,w))
        if(!visted[w])
            DFS(G,w);
}*/
void main()
{
    ArcNode *p;
        int i;
    Graph G;
    creatGraph(G);
    /*biaoji();
    printf("图优先搜索的遍历如下:\n");
    DFS(G,0);
    printf("\n");*/
    printf("邻接表的结构如下:\n");
    for(i=0;i<n;i++)
    {
        printf("%5c",G[i].data);
        p=G[i].firstarc;
        while(p)
        {
            printf("-->%5c",G[p->adjvex].data);
            p=p->nextarc;
        }
        printf("\n");
    }

}

我先写的是建立图并深度遍历的算法但是完全是不能输出!于是就把那几个深度遍历的函数注释掉.输出邻接表也得不到结果!而且我输入结点时每输入一个就输入两行"如请输入第一个结点:请输入第二个结点"只能输入你给定结点个数的一半.输入弧时也是这个问题!望高手帮忙看下!!!

回复列表 (共2个回复)

沙发

这里是PASCAL区,建议楼主发到C或数据结构与算法或信息学奥赛区

板凳

这是什么呀?

我来回复

您尚未登录,请登录后再回复。点此登录或注册