图论可达性c语言实现

概述

       图论中的可达性是指在图中是否存在从一个顶点到另一个顶点的路径。这是图论中的一个基本概念,对于许多实际问题的建模和解决都非常重要。以下是关于图论可达性的一些重要概念和信息:

  1. 有向图和无向图: 图可以分为有向图和无向图。在有向图中,边有方向,从一个顶点到另一个顶点的路径是有向的。在无向图中,边没有方向,路径是无向的。

  2. 可达性定义: 在有向图中,从顶点A到顶点B的可达性表示存在一条有向路径从A到B。在无向图中,如果存在一条路径从顶点A到顶点B,那么A和B被认为是可达的。

  3. 深度优先搜索(DFS): DFS是一种用于遍历图的算法,可以用来检查可达性。通过从起始顶点开始,尽可能深入图中,直到无法继续为止。DFS可以用来查找路径并判断两个顶点之间是否可达。

  4. 广度优先搜索(BFS): BFS是另一种遍历图的算法,它从起始顶点开始,逐层遍历图。BFS也可以用于检查可达性,并找到最短路径。

  5. 图的表示: 图可以通过邻接矩阵或邻接表等方式表示。邻接矩阵是一个二维数组,其中元素表示顶点之间的连接关系。邻接表是一种更灵活的表示方法,使用链表来表示每个顶点的邻接顶点。

  6. 应用: 可达性在许多领域都有重要应用,如网络路由、社交网络分析、数据库查询优化等。在计算机科学和工程中,图的可达性是解决许多实际问题的关键步骤。

总的来说,图论中的可达性是一个关键的概念,它帮助我们理解图结构中的路径和连接关系,为解决各种问题提供了强大的工具。

以下是无向图的可达性实现代码。

无向图完整代码

#include <stdio.h>
#include <stdlib.h>#define MAX_VERTICES 100// 定义图的结构
struct Graph {int vertices;          // 图的顶点数int adjacencyMatrix[MAX_VERTICES][MAX_VERTICES];  // 邻接矩阵表示图的连接关系
};// 函数声明
void initGraph(struct Graph* graph, int vertices);
void addEdge(struct Graph* graph, int start, int end);
void DFS(struct Graph* graph, int vertex, int visited[MAX_VERTICES]);
void checkReachability(struct Graph* graph, int start, int end);int main() {struct Graph graph;int vertices, edges, start, end;// 输入图的顶点数和边数printf("输入图的顶点数和边数:");scanf("%d %d", &vertices, &edges);initGraph(&graph, vertices);// 输入图的边printf("输入图的边(每行包含两个顶点,表示一条边):\n");for (int i = 0; i < edges; i++) {int startVertex, endVertex;scanf("%d %d", &startVertex, &endVertex);addEdge(&graph, startVertex, endVertex);}// 输入要检查可达性的起始点和结束点printf("输入要检查可达性的起始点和结束点:");scanf("%d %d", &start, &end);// 检查可达性checkReachability(&graph, start, end);return 0;
}// 初始化图
void initGraph(struct Graph* graph, int vertices) {graph->vertices = vertices;// 初始化邻接矩阵for (int i = 0; i < vertices; i++) {for (int j = 0; j < vertices; j++) {graph->adjacencyMatrix[i][j] = 0;}}
}// 添加边
void addEdge(struct Graph* graph, int start, int end) {// 有向图,将起始点到结束点的边标记为1graph->adjacencyMatrix[start][end] = 1;
}// 深度优先搜索
void DFS(struct Graph* graph, int vertex, int visited[MAX_VERTICES]) {visited[vertex] = 1;printf("%d ", vertex);for (int i = 0; i < graph->vertices; i++) {if (graph->adjacencyMatrix[vertex][i] == 1 && !visited[i]) {DFS(graph, i, visited);}}
}// 检查可达性
void checkReachability(struct Graph* graph, int start, int end) {int visited[MAX_VERTICES] = {0};printf("从顶点 %d 出发,DFS 遍历结果为:", start);DFS(graph, start, visited);if (visited[end]) {printf("\n%d 可达 %d\n", start, end);} else {printf("\n%d 不可达 %d\n", start, end);}
}

测试无向图

有向图完整代码

#include <stdio.h>
#include <stdlib.h>#define MAX_VERTICES 100// 定义图的结构
struct Graph {int vertices;          // 图的顶点数int adjacencyMatrix[MAX_VERTICES][MAX_VERTICES];  // 邻接矩阵表示图的连接关系
};// 函数声明
void initGraph(struct Graph* graph, int vertices);
void addEdge(struct Graph* graph, int start, int end);
void DFS(struct Graph* graph, int vertex, int visited[MAX_VERTICES]);
void checkReachability(struct Graph* graph, int start, int end);int main() {struct Graph graph;int vertices, edges, start, end;// 输入图的顶点数和边数printf("输入图的顶点数和边数:");scanf("%d %d", &vertices, &edges);initGraph(&graph, vertices);// 输入图的边printf("输入图的边(每行包含两个顶点,表示一条边):\n");for (int i = 0; i < edges; i++) {int startVertex, endVertex;scanf("%d %d", &startVertex, &endVertex);addEdge(&graph, startVertex, endVertex);}// 输入要检查可达性的起始点和结束点printf("输入要检查可达性的起始点和结束点:");scanf("%d %d", &start, &end);// 检查可达性checkReachability(&graph, start, end);return 0;
}// 初始化图
void initGraph(struct Graph* graph, int vertices) {graph->vertices = vertices;// 初始化邻接矩阵for (int i = 0; i < vertices; i++) {for (int j = 0; j < vertices; j++) {graph->adjacencyMatrix[i][j] = 0;}}
}// 添加边
void addEdge(struct Graph* graph, int start, int end) {// 有向图,将起始点到结束点的边标记为1graph->adjacencyMatrix[start][end] = 1;
}// 深度优先搜索
void DFS(struct Graph* graph, int vertex, int visited[MAX_VERTICES]) {visited[vertex] = 1;printf("%d ", vertex);for (int i = 0; i < graph->vertices; i++) {if (graph->adjacencyMatrix[vertex][i] == 1 && !visited[i]) {DFS(graph, i, visited);}}
}// 检查可达性
void checkReachability(struct Graph* graph, int start, int end) {int visited[MAX_VERTICES] = {0};printf("从顶点 %d 出发,DFS 遍历结果为:", start);DFS(graph, start, visited);if (visited[end]) {printf("\n%d 可达 %d\n", start, end);} else {printf("\n%d 不可达 %d\n", start, end);}
}

测试有向图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/641167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL JSON数据类型

在日常开发中&#xff0c;我们经常会在 MySQL 中使用 JSON 字段&#xff0c;比如很多表中都有 extra 字段&#xff0c;用来记录一些特殊字段&#xff0c;通过这种方式不需要更改表结构&#xff0c;使用相对灵活。 目前对于 JSON 字段的实践各个项目不尽相同&#xff0c;MySQL 表…

未来趋势:视频美颜SDK与增强现实(AR)的融合

当下&#xff0c;视频美颜SDK不断演化&#xff0c;成为用户记录和分享生活时不可或缺的一部分。同时&#xff0c;增强现实技术也以其独特的沉浸感和交互性受到青睐&#xff0c;被广泛应用于游戏、教育、医疗等领域。 一、视频美颜与AR的结合 1.实时美颜的AR增值体验 借助AR的…

idea带的maven在SpringBoot下载jar包出错、下载jar包速度慢

找到idea安装目录 /IntelliJ IDEA/plugins/maven/lib/maven3/conf/settings.xml 搜索:mirrors 添加到mirrors标签里 <mirror><id>central</id><mirrorOf>central</mirrorOf><url>https://maven.aliyun.com/repository/public</url> …

【Web前端开发基础】CSS的结构伪类选择器、伪元素、浮动

CSS的浮动 目录 CSS的浮动一、学习目标二、文章内容2.1 结构伪类选择器2.2 伪元素2.3 标准流2.4 浮动2.5 清除浮动2.6 拓展&#xff08;BFC&#xff09; 三、综合案例3.1 小米模块案例3.2 网页导航案例 一、学习目标 能够使用结构伪类选择器在HTML中选元素能够说出标准流元素的…

服务器管理平台(5)- 数据展示

数据展示 Grafana导入MySQL数据源进行定制化数据展示&#xff0c;包括品牌分类饼图&#xff0c;详细数据列表等LayUI为开源前端框架&#xff0c;对系统概览、登录日志等信息&#xff0c;划分不同页面使用表格展示详细数据 1、Grafana 对品牌、CPU型号、内存等数据使用饼图展示…

【0248】Background Writing实现机制分析

文章目录 1. 前言2. 有了checkpoint,为何还需要background writing?2.1 checkpoint和background writing有何差异? 如何协同工作?2.2 background writing如何工作? 职责是什么?1. 前言 本文是Background Writing进程理论篇,源码剖析实战篇会在后面给出。本文的主要内容…

单例模式分享

Java的单例模式详解与案例解析 单例模式是一种常见的设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点。在Java中&#xff0c;实现单例模式有多种方式&#xff0c;我们将深入讨论其中的几种&#xff0c;并通过丰富的案例演示它们的用法。 1. 饿…

探索全球DNS体系 | 从根服务器到本地解析

DNS 发展 DNS&#xff08;Domain Name System&#xff09;的起源可以追溯到互联网早期。 早期的挑战&#xff1a; 早期互联网主要通过IP地址进行通信&#xff0c;用户需要记住复杂的数字串来访问网站。 需求的催生&#xff1a; 随着互联网的扩大&#xff0c;更简单、易记的…

【剑指offer】重建二叉树

&#x1f451;专栏内容&#xff1a;力扣刷题⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、题目描述1、题目2、示例 二、题目分析1、递归2、栈 一、题目描述 1、题目 剑指offer&#xff1a;重建二叉树 给定节…

笨蛋学设计模式行为型模式-责任链模式【18】

行为型模式-责任链模式 8.5责任链模式:arrow_up::arrow_up::arrow_up:8.5.1概念8.5.2场景8.5.3优势 / 劣势8.5.4责任链模式可分为8.5.5责任链模式8.5.6实战8.5.6.1题目描述8.5.6.2输入描述8.5.6.3输出描述8.5.6.4代码 8.5.7总结 8.5责任链模式⬆️⬆️⬆️ 8.5.1概念 ​ 责任…

在CentOS 7中配置 RAID服务

实验过程 Xnode1克隆虚拟机raid ps&#xff1a; 阿里云盘Xnode1获取 xnode1 https://www.alipan.com/s/HgLXfoeBWG2 提取码: eb70 编辑虚拟机 添加2硬盘 CRT连接&#xff08;root密码&#xff1a;000000&#xff09; 创建raid 0 [rootdemo ~]# lsblk 安装mdadm [rootdemo…

go语言(十四)----反射

变量的结构 2 举个例子 package mainimport "fmt"type Reader interface {ReadBook() }type Writer interface {WriteBook() }//具体类型 type Book struct {}func (this *Book) ReadBook() {fmt.Println("Read a Book")}func (this *Book) WriteBook() {…

项目工时统计成本核算管理

技术架构: Java 1.8 MySQL 8 Vue 项目基于前后端分离架构&#xff0c;服务端主要技术&#xff1a;SpringBoot 前端主要是Vue。 项目介绍&#xff1a; 轻量级项目工时统计系统&#xff0c;是目前企业进行项工时管理统计的推荐选择。 通过项目工时管理系统&#xff0c;可通过…

ffmpeg 实用命令 -- 缩放与裁切

缩放 缩放是一个常见的需求&#xff0c;这需要使用到 FFmpeg 提供的视频过滤器&#xff08;或称视频滤镜&#xff0c;video filter&#xff09;&#xff0c;也即 -vf 参数。由于过滤器的使用过于复杂&#xff0c;在此也不会详细介绍&#xff1b;这里只是针对过滤器中的缩放器&…

Github2024-01-23 开源项目日报 Top9

根据Github Trendings的统计&#xff0c;今日(2024-01-23统计)共有9个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目3Go项目2TypeScript项目2Dart项目1Jupyter Notebook项目1 gpt4free 语言模型集合改进计划 创建周期…

vConsole 与 Vue中未定义变量而引发的Maximum call stack size exceeded异常问题

一、问题描述 前段时间有个前端小伙伴反馈在打包发布正式环境后调用VantUI的<van-popup>组件显示时&#xff0c;显示空白&#xff0c;并且在控制台看到一个Maximum call stacksize exceeded&#xff08;超出最大调用堆栈大小&#xff09;,而本地开发环境正常&#xff1a…

工业相机+镜头选型及靶面、焦距计算等相关详解

工业相机镜头选型及靶面、焦距计算等相关详解 着重讲述相机的各个参数及使用意义总结相机镜头选型主要参数的推理计算 0. 工业相机相关概念简介 相机与镜头一览 工业相机与镜头实物图如下图所示&#xff1a; 常见的相机有两种供电方式&#xff1a;一种是电源线供电&#xff0…

接口自动化测试框架开发(pytest+allure+aiohttp+ 用例自动生成)

近期准备优先做接口测试的覆盖&#xff0c;为此需要开发一个测试框架&#xff0c;经过思考&#xff0c;这次依然想做点儿不一样的东西。 接口测试是比较讲究效率的&#xff0c;测试人员会希望很快能得到结果反馈&#xff0c;然而接口的数量一般都很多&#xff0c;而且会越来越…

设置Linux用户的最大进程数和最大打开文件描述符数

【命令】 cat <<EOF>> /etc/security/limits.conf root - nproc 512000 * - nproc 512000 root - nofile 512000 * - nofile 512000 EOF 【解读】 这个命令是在执行一个Shell脚本&#xff0c;通过sh -c来传递一个字符串作为命令参数。这个字符串包含了对/e…

【Cloudflare】怎样重定向www二级域名到根域名?

官方文档&#xff1a;Redirecting www to domain apex 按照上述文档操作就可以&#xff0c;步骤比较繁琐。 另外&#xff0c;在网站页面有菜单&#xff1a;Rules -> Redirect Rules&#xff0c;在这里做重定向配置比上述方式简单&#xff0c;但我没看到官方文档的介绍&…