当前位置: 首页 > news >正文

图的遍历之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;
}
/** 你提交的代码将被嵌在这里 **/

输入样例:

1.jpg

对于图片中的图以及样例测试程序的输入方式(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);}}
}

http://www.lryc.cn/news/498586.html

相关文章:

  • Java --- JVM编译运行过程
  • HTML5 拖拽 API 深度解析
  • GO--基于令牌桶和漏桶的限流策略
  • MongoDB性能监控工具
  • Axure设计之模拟地图人员移动轨迹
  • Android环境搭建
  • 前端工程化面试题(一)
  • 模型案例:| 手机识别模型!
  • 期权懂|个股期权交割操作流程是什么样的?
  • 【openGauss】openGauss execute执行update语句,获取更新的行数
  • P8780 [蓝桥杯 2022 省 B] 刷题统计
  • 切比雪夫不等式:方差约束下的概率估计
  • 使用CancellationTokenSource来控制长时间sql查询中断
  • 小红薯最新x-s 算法补环境教程12-06更新(下)
  • wazuh-modules-sca
  • Uniapp的App环境下使用Map获取缩放比例
  • 微信小程序配置less并使用
  • “全面支持公路数字化转型升级四大任务”视频孪生解决方案
  • 顶顶通电话机器人开发接口对接大语言模型之实时流TTS对接介绍
  • P3379 【模板】最近公共祖先(LCA)
  • 2030. gitLab A仓同步到B仓
  • 网易博客旧文-----如何在WINDOWS下载安卓(android)源代码并和eclipse做关联
  • MATLAB中axes函数用法
  • 构建 Java Web 应用程序:实现简单的增删查改(Mysql)
  • 3d行政区划-中国地图
  • 适合存储时序数据的数据库和存储系统
  • dolphinscheduler集群服务一键安装启动实现流程剖析
  • 深入了解Linux —— 学会使用vim编辑器
  • C05S01-Web基础和HTTP协议
  • MIT工具课第六课任务 Git基础练习题