none
这是C的代码,深度优先遍历,不知道该怎么改。哪位高手指点一下? RRS feed

  • 问题

  • //为什么这个程序运行到输入顶点后就会自动停止呢?

    #include<stdio.h>
    typedef char VertexType;//邻接矩阵,深度优先遍历
    typedef int EdgeType;
    #define MAXVEX 100
    #define INFINITY 65535
    #define TURE 1
    #define FALSE 0
    typedef int Boolean;
    Boolean visited[MAXVEX];

    typedef struct
    {
     VertexType vexs[MAXVEX];
     EdgeType arc[MAXVEX][MAXVEX];
     int numVertexes, numEdges;
    }MGraph;  //邻接矩阵的方式表示图

    void CreateMGraph(MGraph G)
    {
     int i,j,k,w;
     printf("输入顶点数和边数:\n");
     scanf ("%d,%d",&G.numVertexes ,&G.numEdges);
     printf("输入顶点:\n");
     for(i=0;i<G.numVertexes ;++i)// scanf("%c",&G.vexs[i]);
     for(i=0;i<G.numVertexes ;i++)//初始化邻接矩阵
      for(j=0;j<G.numVertexes;j++)
       G.arc[i][j]=INFINITY;
     for(k=0;k<G.numEdges;k++)//对有关系的边赋值
     {
      printf("输入边(Vi,Vj)的下标i,j,和权值w:\n");
      scanf("%d,%d,%d",&i,&j,&w);
      G.arc[i][j]=w;
      G.arc[j][i]=G.arc[i][j];
     }
    }

    void DFS(MGraph G,int i)//深度优先遍历
    {
     int j;
     visited[i]=TURE;
     printf("%c",G.vexs[i]);
     for(j=0; j<G.numVertexes;j++)
      if(G.arc[i][j]!=INFINITY&&!visited[j])
       DFS(G, j);
    }

    void DFSTraverse(MGraph G)
    {
     int i;
     for(i=0;i<G.numVertexes;i++)
      visited[i]=FALSE;
     for(i=0;i<G.numVertexes;i++)
      if(!visited[i])
       DFS(G, i);
    }

     void main()
    {
     MGraph G;
        CreateMGraph(G);
     DFSTraverse(G);
    }

    2012年5月20日 11:04

答案

  • I suggest you try as follows in CreateMGraph function:

    int i,j,k,w;
    printf("输入顶点数和边数:\n");
    scanf ("%d,%d",&G.numVertexes ,&G.numEdges);
    printf("输入顶点:\n");
    for(i=0;i<G.numVertexes ;++i)//
    { 
       scanf("%c",&G.vexs[i]);
    }
    for(i=0;i<G.numVertexes ;i++)//初始化邻接矩阵
    {
       for(j=0;j<G.numVertexes;j++)
       {
          G.arc[i][j]=INFINITY;
       }
    }
     


    Please mark this reply as answer if it helps you! Thanks for your cooperation! Good Luck to you.

    • 已标记为答案 Helen Zhao 2012年6月1日 8:29
    2012年5月21日 3:07

全部回复

  • I suggest you try as follows in CreateMGraph function:

    int i,j,k,w;
    printf("输入顶点数和边数:\n");
    scanf ("%d,%d",&G.numVertexes ,&G.numEdges);
    printf("输入顶点:\n");
    for(i=0;i<G.numVertexes ;++i)//
    { 
       scanf("%c",&G.vexs[i]);
    }
    for(i=0;i<G.numVertexes ;i++)//初始化邻接矩阵
    {
       for(j=0;j<G.numVertexes;j++)
       {
          G.arc[i][j]=INFINITY;
       }
    }
     


    Please mark this reply as answer if it helps you! Thanks for your cooperation! Good Luck to you.

    • 已标记为答案 Helen Zhao 2012年6月1日 8:29
    2012年5月21日 3:07
  • I've tried, but it's not OK. Thanks, anyway.
    2012年5月22日 15:10