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

用邻接矩阵实现图的深度优先遍历

问题描述

给定一个无向图,用邻接矩阵作为图的存储结构,输出指定顶点出发的深度优先遍历序列。在深度优先遍历的过程中,如果同时出现多个待访问的顶点,则优先选择编号最小的一个进行访问。

输入描述

第一行输入三个正整数,分别表示无向图的顶点数n(2≤n≤100,顶点从1到n编号)、边数m和指定起点编号s。
接下来的m行对应m条边,每行给出两个正整数,分别是该条边直接连通的两个顶点的编号。

输出描述

输出从 s开始的深度优先遍历序列,用一个空格隔开,最后也含有一个空格。如果从 s出发无法遍历到图中的所有顶点,则在第二行输出Non‑connected。

样例输入
5 4 1
1 2
3 1
5 2
2 3
样例输出
1 2 3 5 
Non-connected
#include<stdio.h>
#define MVNUM 10 //最大顶点数
typedef int VerTexType; //顶点数据类型为整型
typedef int ArcType; //边的权值为整型
typedef struct
{VerTexType vexs[MVNUM];//顶点表ArcType arcs[MVNUM][MVNUM]; //邻接矩阵int vexnum, arcnum; //图当前的顶点数和边数int visited[MVNUM];
}AMGraph;
static int LocateVex(AMGraph G, int v)  //在图中查找顶点
{for (int i = 0; i < G.vexnum; i++)if (v == G.vexs[i])return i;return -1;
}
static void CreateUDG(AMGraph &G)  //创建无向网
{for (int i = 0; i < G.vexnum; i++) //创建顶点表{G.vexs[i] = i + 1;G.visited[i+1] = 0;  //未搜索的顶点标记为0}for (int i = 0; i < G.vexnum; i++)  //邻接矩阵元素置零for (int j = 0; j < G.vexnum; j++)G.arcs[i][j] = 0;for (int k = 0; k < G.arcnum; k++){int v1 = 0, v2 = 0;scanf("%d%d", &v1, &v2);int i = LocateVex(G, v1);int j = LocateVex(G, v2);G.arcs[i][j] = 1;G.arcs[j][i] = 1;}return;
}
int count = 0;
static void DFS(AMGraph &G, int v)
{count++;printf("%d ", v);G.visited[v] = 1;  //访问过的顶点标记为1for (int j = 1; j <= G.vexnum; j++)if (G.arcs[v-1][j-1] && !G.visited[j])DFS(G, j);  //递归调用
}
int main()
{int s = 0;  //指定起点编号AMGraph G;scanf("%d%d%d", &G.vexnum, &G.arcnum, &s);CreateUDG(G);DFS(G, s);if (count < G.vexnum)printf("\nNon-connected");return 0;
}   

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

相关文章:

  • vue2中实现token的无感刷新
  • 无需Photoshop即可在线裁剪和调整图像大小的工具
  • 云安全之法律和合规
  • 倒计时功能分享
  • 【论文分享】使用多源数据识别建筑功能:以中国三大城市群为例
  • 华为手机启用ADB无线调试功能
  • 云原生之Kubernetes集群搭建
  • STM32单片机CAN总线汽车线路通断检测
  • 大连理工大学概率上机作业免费下载
  • Tomcat 如何管理 Session
  • stm32启动过程解析startup启动文件
  • SystemVerilog学习——构造函数new
  • 力扣题目总结
  • Java API 进阶指南:从核心API到高级应用的全面提升
  • esp32c3开发板通过micropython的ubluetooth库连蓝牙设备
  • leetcode hot100【LeetCode 35.搜索插入位置】java实现
  • 我们要用平凡来诠释非凡
  • synchronized和volatile区别
  • 125.验证回文串-力扣(LeetCode)
  • 线程间通信:wait和notify
  • 风险识别和管理的工具
  • qt之QFTP对文件夹(含嵌套文件夹和文件)、文件删除下载功能
  • 为何数据库推荐将IPv4地址存储为32位整数而非字符串?
  • Mybatis框架之责任链模式 (Chain of Responsibility Pattern)
  • C++ Stack和Queue---单向守护与无尽等待:数据结构的诗意表达
  • 深入理解Java包装类与泛型的应用
  • 【机器学习chp4】特征工程
  • LeetCode螺旋矩阵
  • 第十五届蓝桥杯JAVA的B组题目详情解析
  • 在几分钟内将数据从 Oracle 迁移到 ClickHouse