我想要一个判断无向图是否有圈的C语言源代码。要求是 利用“邻接矩阵”存储无向图; 2.利用DFS(深度优先搜索算法)判断无向图中是否有圈。如果无向图中存在圈,则将所找到的圈的顶点序列依次输出,否则输出“无”。以这种形式输入:0 1 1 1 0 1 1 1 0

时间: 2024-05-09 13:15:08 浏览: 12
下面是一个使用邻接矩阵和DFS算法判断无向图是否有圈的C语言源代码: ```c #include <stdio.h> #define MAXN 100 int n; // 图中顶点数 int G[MAXN][MAXN]; // 邻接矩阵 int visited[MAXN]; // 标记访问过的顶点 int dfs(int v, int prev, int start) { visited[v] = 1; // 标记当前顶点已经访问过 for (int i = 0; i < n; i++) { if (G[v][i]) { // 如果顶点v和顶点i之间有一条边 if (!visited[i]) { // 如果顶点i没有被访问过 int res = dfs(i, v, start); if (res != -1) // 找到了圈 return res; } else if (i != prev && i == start) { // 找到了圈 return v; } } } return -1; // 没有找到圈 } int find_cycle() { // 从每个未访问的顶点开始深度优先搜索 for (int i = 0; i < n; i++) { if (!visited[i]) { int res = dfs(i, -1, i); if (res != -1) { // 找到了圈 return res; } } } return -1; // 没有找到圈 } int main() { scanf("%d", &n); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { scanf("%d", &G[i][j]); } } int start = find_cycle(); // 找到一个圈的起点 if (start == -1) { // 没有找到圈 printf("无\n"); } else { printf("%d", start); visited[start] = 0; int v = start; while (1) { // 输出圈的顶点序列 int next = -1; for (int i = 0; i < n; i++) { if (G[v][i] && visited[i]) { next = i; break; } } if (next == -1) break; printf("-%d", next); visited[next] = 0; v = next; if (v == start) break; } printf("-%d\n", start); } return 0; } ``` 输入格式为: ``` n G[0][0] G[0][1] ... G[0][n-1] G[1][0] G[1][1] ... G[1][n-1] ... G[n-1][0] G[n-1][1] ... G[n-1][n-1] ``` 其中,`n`为图中顶点数,`G[i][j]`表示顶点i和顶点j之间是否有一条边,如果有则为1,否则为0。输出格式为: - 如果无向图中存在圈,则输出圈的顶点序列,顶点之间用连字符“-”隔开,最后一个顶点后面也要加一个连字符“-”,并换行结束; - 如果无向图中不存在圈,则输出“无”,并换行结束。 例如,对于输入数据: ``` 5 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 ``` 程序的输出为: ``` 0-1-2-3-1- ```

相关推荐

最新推荐

recommend-type

Python根据已知邻接矩阵绘制无向图操作示例

主要介绍了Python根据已知邻接矩阵绘制无向图操作,涉及Python使用networkx、matplotlib进行数值运算与图形绘制相关操作技巧,需要的朋友可以参考下
recommend-type

邻接表或者邻接矩阵为存储结构实现连通无向图的深度优先和广度优先遍历

程序设计任务: 设计一个程序,实现以邻接表或者邻接矩阵为存储结构,实现连通无向图的深度优先和广度优先遍历。基本要求:以邻接表或者邻接矩阵为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的...
recommend-type

C语言实现图的邻接矩阵存储操作

主要为大家详细介绍了C语言实现图的邻接矩阵存储操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本116.0.5808.0)

资源包括: 1.Java爬虫实战代码 2.selenium学习笔记 3.代码演示视频 4.谷歌浏览器chrom116.0.5808.0 chrome-linux64.zip chrome-mac-arm64.zip chrome-mac-x64.zip chrome-win32.zip chrome-win64.zip 5.谷歌浏览器驱动器Chromedriver116.0.5808.0 chromedriver-linux64.zip chromedriver-mac-arm64.zip chromedriver-mac-x64.zip chromedriver-win32.zip chromedriver-win64.zip 特别说明:Chrome 为测试版(不会自动更新) 仅适用于自动测试。若要进行常规浏览,请使用可自动更新的标准版 Chrome。)
recommend-type

2024消费趋势报告.pdf

2024消费趋势报告.pdf
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB正态分布协方差分析:揭示正态分布变量之间的协方差

![MATLAB正态分布协方差分析:揭示正态分布变量之间的协方差](https://site.cdn.mengte.online/official/2021/11/20211128213137293.png) # 1. 正态分布概述 正态分布,又称高斯分布,是统计学中最重要的连续概率分布之一。它广泛应用于自然科学、社会科学和工程领域。 正态分布的概率密度函数为: ``` f(x) = (1 / (σ√(2π))) * exp(-(x - μ)² / (2σ²)) ``` 其中: - μ:正态分布的均值 - σ:正态分布的标准差 - π:圆周率 正态分布具有以下特性: - 对称性:
recommend-type

我正在开发一款个人碳足迹计算app,如何撰写其需求分析文档,请给我一个范例

为了更全面、清晰地定义个人碳足迹计算app的需求,需求分析文档应该包含以下内容: 1.项目简介:对该app项目的概述及目标进行说明。 2.用户分析:包括目标用户群、用户需求、行为等。 3.功能需求:对app的基本功能进行定义,如用户登录、数据录入、数据统计等。 4.非功能需求:对使用app的性能和质量等进行定义,如界面设计、数据安全、可扩展性等。 5.运行环境:包括app的开发环境和使用环境。 下面是一个范例: 需求分析文档 1. 项目简介 该app项目旨在为用户提供一款方便、易用、可定制的个人碳足迹计算平台,以促进环保和可持续性发展。 2. 用户分析 目标用户群:全球关
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。