不二如是 发表于 2017-11-25 10:03:20

已有 58 人购买  本主题需向作者支付 2 鱼币 才能浏览 购买主题

圣狄雅哥 发表于 2018-4-21 10:28:10

我试了一下可以建立邻接矩阵,但不能按深度优先遍历输出,原因未知,谁看懂了帮忙...

[ 本帖最后由 圣狄雅哥 于 2018-4-21 11:29 编辑 ]\n\n#include <stdio.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0
#define MAX 100
#define MAXVER 100

typedef int Boolean;
Boolean visited;
typedef struct
{
    char vexs;
    int arc;
    int numVertexes,numEdges;
}MGraph;

void CreateMGraph(MGraph*G)
{
    int i,j,k;
    printf("请输入顶点数和边数:\n");
    scanf("%d %d",&G->numVertexes,&G->numEdges);
    printf("输入各顶点:\n");
    for(i=0;i<G->numVertexes;i++)
    {
      scanf("%c",&G->vexs);
    }
    for(i=0;i<G->numVertexes;i++)
    {
      for(j=0;j<G->numVertexes;j++)
      {
            G->arc=0;
      }
    }
    for(k=0;k<G->numEdges;k++)
    {
      printf("请输入边(Vi,Vj)上的下标i、j,并将权标为1表示连通:\n");
      fflush(stdin);
      scanf("%d %d",&i,&j);
      G->arc=1;
      G->arc=G->arc;
    }
}
void PrintVexs(MGraph*G)
{
    int i,j;
    printf("当前无向图的邻接矩阵为:\n");
    for(i=0;i<G->numVertexes;i++)
    {
      for(j=0;j<G->numVertexes;j++)
      {
            printf("%2d ",G->arc);
      }
      printf("\n");
    }
    printf("\n");
}

void DFS(MGraph *G,int i)
{
    int j;
    visited=TRUE;
    printf("%c ",G->vexs);
    for(j=0;j<G->numVertexes;j++)
    {
      if(G->arc==1&&!visited)
      {
            DFS(G,j);
      }
    }
    printf("\n");
}
void DFSTraverse(MGraph* G)
{
    int i;
    for(i=0;i<G->numVertexes;i++)
    {
      visited=FALSE;
    }
    for(i=0;i<G->numVertexes;i++)
    {
      if(!visited)
      {
            DFS(G,i);
      }
    }
}

int main()
{
    MGraph *G;
    G=(MGraph*)malloc(sizeof(MGraph));
    CreateMGraph(G);
    PrintVexs(G);
    printf("深度优先遍历结果为:\n");
    DFSTraverse(G);
    printf("\n");
    return 0;
}


小菜鸟516 发表于 2020-5-7 15:06:22

didi

雪月圣雕 发表于 2021-3-22 09:18:21

邻接矩阵的代码在第16行有误:vistited = TRUE; 应该改为哦vistied = TRUE
页: [1]
查看完整版本: ★ 第五十九讲 图的遍历 | 【深度优先遍历】 ★