注册 登录
编程论坛 数据结构与算法

真的跪求了实在是不知道哪错了,大家帮着给看看吧,求你们了

梦随心死 发布于 2012-12-06 22:23, 332 次点击
编译没错,就是最后得不到遍历结果希望大家给运行看看是怎么回事呀,谢了谢了。。。
#include<stdio.h>
#define MaxInt 10000
#define MVNum 100
typedef char VertexType;
typedef int ArcType;
typedef enum{FALSE,TRUE}define;  
define visited[MaxInt];   
typedef struct
{
    VertexType vexs[MVNum];
    ArcType arcs[MVNum][MVNum];
    int vexnum,arcnum;
}Graph;
int Locate(Graph G,char v)
{
    int i;
    for(i=0;i<G.vexnum;i++)
    if(G.vexs[i]==v)
    return i;
    return -1;
}
void CreatGraph(Graph G)
{
    int i,j,w;
    char v1,v2;
    printf("输入顶点个数和边条数\n");
    scanf("%d,%d",&G.vexnum,&G.arcnum);
    getchar();
   
    for(i=0;i<G.vexnum;i++)
    {
        printf("输入第%d个顶点:",i+1);
        scanf("%c",&G.vexs[i]);
        getchar();
    }
    for(i=0;i<G.vexnum;i++)//初始化
    {
        for(j=0;j<G.vexnum;j++)
        {
            G.arcs[i][j]=MaxInt;
        }
    }
    for(i=0;i<G.arcnum;i++)
    {
        printf("请输入第%d条边所依附的顶点及边上权值:",i+1);
        scanf("%c,%c,%d",&v1,&v2,&w);
        getchar();
    }
    i=Locate(G,v1);
    j=Locate(G,v2);
    G.arcs[i][j]=w;
    G.arcs[j][i]=G.arcs[i][j];
}
void DFS(Graph G,int i)  
{  
int j;  
printf("%c\n",G.vexs[i]);   //访问顶点vi  
visited[i]=TRUE;         
for(j=0;j<G.vexnum;j++)           //依次搜索vi邻接点  
if(G.arcs[i][j]!=MaxInt && !visited[j])  
DFS(G,j);  
}  
void DFSsearch(Graph G)  
{  
int i;  
for(i=0;i<G.vexnum;i++)  
visited[i]=FALSE;     
for(i=0;i<G.vexnum;i++)  
if(!visited[i])   
DFS(G,i);  
}  
void main()
{
    Graph G;
    CreatGraph(G);
    printf("*******************无向网创建完成******************\n");
    printf("深度优先遍历顺序:\n");
    DFSsearch(G);
}
4 回复
#2
凌云飞翔2012-12-07 00:08
程序代码:
#include<stdio.h>
#define MaxInt 10000
#define MVNum 100
typedef char VertexType;
typedef int ArcType;
typedef enum{FALSE,TRUE}define;
define visited[MaxInt];  
typedef struct
{
    VertexType vexs[MVNum];
    ArcType arcs[MVNum][MVNum];
    int vexnum,arcnum;
}Graph;
int Locate(Graph G,char v)
{
    int i;
    for(i=0;i<G.vexnum;i++)
    if(G.vexs[i]==v)
    return i;
    return -1;
}
void CreatGraph(Graph &G)
{
    int i,j,w;
    char v1,v2;
    printf("输入顶点个数和边条数\n");
    scanf("%d,%d",&G.vexnum,&G.arcnum);
    getchar();
    for(i=0;i<G.vexnum;i++)
    {
        printf("输入第%d个顶点:",i+1);
        scanf("%c",&G.vexs[i]);
        getchar();
    }
    for(i=0;i<G.vexnum;i++)//初始化
    {
        for(j=0;j<G.vexnum;j++)
        {
            G.arcs[i][j]=MaxInt;
        }
    }

    for(i=0;i<G.arcnum;i++)
    {
        printf("请输入第%d条边所依附的顶点及边上权值:",i+1);

        scanf("%c,%c,%d",&v1,&v2,&w);
    getchar () ;
   
      
    }
   
    i=Locate(G,v1);
    j=Locate(G,v2);
    G.arcs[i][j]=w;
    G.arcs[j][i]=G.arcs[i][j];
}

void DFS(Graph G,int i)
{
int j;
printf("%5c",G.vexs[i]);   //访问顶点vi
visited[i]=TRUE;         
for(j=0;j<G.vexnum;j++)           //依次搜索vi邻接点
if(G.arcs[i][j]!=MaxInt && !visited[j])
DFS(G,j);
}
void DFSsearch(Graph G)
{
int i;
for(i=0;i<G.vexnum;i++)
visited[i]=FALSE;   
for(i=0;i<G.vexnum;i++)
if(!visited[i])  
DFS(G,i);
}
void main()
{
    Graph G;
    CreatGraph(G);
    printf("*******************无向网创建完成******************\n");
    printf("深度优先遍历顺序:\n");
    DFSsearch(G);
  printf("\n");
}
#3
凌云飞翔2012-12-07 00:09
只有本站会员才能查看附件,请 登录
#4
凌云飞翔2012-12-07 00:13
CreatGraph(Graph G)改为  CreatGraph(Graph &G)
#5
georgeliuyan2012-12-08 18:33
CreatGraph(Graph G)不能将G的值传出来,需要改成引用CreatGraph(Graph &G)!
1