图的遍历之DFS邻接矩阵法

本题要求实现一个函数,对给定的用邻接矩阵存储的无向无权图,以及一个顶点的编号v,打印以v为起点的一个深度优先搜索序列。

当搜索路径不唯一时,总是选取编号较小的邻接点。

本题保证输入的数据(顶点数量、起点的编号等)均合法。

函数接口定义:

复制代码
void DFS(struct Graph *g, int v)

其中 g 是图结构体指针,v 是起点编号。图结构体定义如下:

复制代码
#define MaxVertexNum 20  // 最大顶点数
struct Graph{
    int v;  // 顶点数量
    int adj[MaxVertexNum][MaxVertexNum]; //邻接矩阵
}

裁判测试程序样例:

复制代码
#include <stdio.h>
#include <stdlib.h>
/** 实际的测试程序中,
 ** MaxVertexNum可能不是20,
 ** 但一定是合法的、不会引发内存错误 
 **/
#define MaxVertexNum 20  
struct Graph{
    int v;  // 顶点数量
    int adj[MaxVertexNum][MaxVertexNum];  //邻接矩阵
};
int visited[MaxVertexNum];  //顶点的访问标记
void DFS(struct Graph *g, int v);  //本题要求实现的函数原型
struct Graph* CreateGraph(){    // 创建图
    int v;
    scanf("%d",&v);
    struct Graph* g;
    g = malloc(sizeof(struct Graph));
    if(!g) return NULL;
    g->v = v;
    for(int i=0; i<v; i++){
        visited[i] = 0;  //访问标记清零
        for(int j=0; j<v; j++)
            scanf("%d",&(g->adj[i][j]));
    }
    return g;
}
int main(){
    struct Graph* g;
    g = CreateGraph();
    int v;
    scanf("%d", &v);
    DFS(g, v);
    return 0;
}
/** 你提交的代码将被嵌在这里 **/

输入样例:

对于图片中的图以及样例测试程序的输入方式(8个顶点的邻接矩阵,从1号顶点出发):

复制代码
8
0 1 1 0 0 0 0 1
1 0 0 0 1 0 0 0
1 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0
0 1 1 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1

输出样例:

注意,总是选取编号小的邻接点

复制代码
1
0
2
4
7

实现代码(邻接矩阵)

复制代码
void DFS(struct Graph *g, int v)
{
    int w;
    printf("%d\n",v);
    visited[v]=1;
    for(int i=0;i<g->v;i++)
    {
        if((g->adj[v][i]!=0)&&(!visited[i]))
        {
            DFS(g,i);
        }
    }
}
相关推荐
Steve lu44 分钟前
回归任务损失函数对比曲线
人工智能·pytorch·深度学习·神经网络·算法·回归·原力计划
蒙奇D索大1 小时前
【数据结构】图论核心算法解析:深度优先搜索(DFS)的纵深遍历与生成树实战指南
数据结构·算法·深度优先·图论·图搜索算法
ShiinaMashirol1 小时前
代码随想录打卡|Day50 图论(拓扑排序精讲 、dijkstra(朴素版)精讲 )
java·图论
让我们一起加油好吗1 小时前
【基础算法】高精度(加、减、乘、除)
c++·算法·高精度·洛谷
不会敲代码的灵长类2 小时前
机器学习算法-k-means
算法·机器学习·kmeans
Studying 开龙wu2 小时前
机器学习有监督学习sklearn实战二:六种算法对鸢尾花(Iris)数据集进行分类和特征可视化
学习·算法·机器学习
鑫鑫向栄2 小时前
[蓝桥杯]缩位求和
数据结构·c++·算法·职场和发展·蓝桥杯
Tony__Ferguson2 小时前
简述八大排序(Sort)
数据结构·算法·排序算法
芜湖xin2 小时前
【题解-洛谷】P9422 [蓝桥杯 2023 国 B] 合并数列
算法·队列
鑫鑫向栄2 小时前
[蓝桥杯]外卖店优先级
数据结构·c++·算法·职场和发展·蓝桥杯