鱼C论坛

 找回密码
 立即注册
查看: 6135|回复: 3

[学习笔记] ★ 第五十九讲 图的遍历 | 【深度优先遍历】 ★

[复制链接]
发表于 2017-11-25 10:03:20 | 显示全部楼层 |阅读模式
购买主题 已有 58 人购买  本主题需向作者支付 2 鱼币 才能浏览

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[MAX];
typedef struct
{
    char vexs[MAXVER];
    int arc[MAXVER][MAXVER];
    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[i]);
    }
    for(i=0;i<G->numVertexes;i++)
    {
        for(j=0;j<G->numVertexes;j++)
        {
            G->arc[i][j]=0;
        }
    }
    for(k=0;k<G->numEdges;k++)
    {
        printf("请输入边(Vi,Vj)上的下标i、j,并将权标为1表示连通:\n");
        fflush(stdin);
        scanf("%d %d",&i,&j);
        G->arc[i][j]=1;
        G->arc[j][i]=G->arc[i][j];
    }
}
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[i][j]);
        }
        printf("\n");
    }
    printf("\n");
}

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

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


捕获.JPG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-7 15:06:22 | 显示全部楼层
didi
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-22 09:18:21 | 显示全部楼层
邻接矩阵的代码在第16行有误:vistited[j] = TRUE; 应该改为哦vistied[i] = TRUE
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 00:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表