走进图算法:C语言实现图的表示与深度优先搜索

走进图算法:C语言实现图的表示与深度优先搜索

图是一种重要的数据结构,它在计算机科学中广泛用于表示各种关系和网络。本篇博客将深入介绍图的基本概念、邻接矩阵表示方法以及深度优先搜索(DFS)算法的C语言实现示例。

图的基本概念

图是由一组节点(顶点)和连接这些节点的边组成的数据结构。图可以分为有向图和无向图,边可以具有权重(带权图)或不带权。下面是一个无向图的示例:

   A/ \B---C\ /D

邻接矩阵表示法

邻接矩阵是一种表示图的常用方法,它使用一个二维数组来表示图中节点之间的连接关系。下面是一个无向图的邻接矩阵表示:

   A B C D
A 0 1 1 0
B 1 0 1 1
C 1 1 0 1
D 0 1 1 0

深度优先搜索(DFS)

深度优先搜索是一种图遍历算法,它从起始节点开始,沿着一条路径尽可能深入地访问节点,直到无法继续为止,然后回溯到上一个节点继续探索。下面是深度优先搜索的C语言实现示例:

#include <stdio.h>
#include <stdbool.h>#define MAX_VERTICES 100typedef struct {int vertices[MAX_VERTICES];int matrix[MAX_VERTICES][MAX_VERTICES];int numVertices;
} Graph;void initializeGraph(Graph* graph, int numVertices) {graph->numVertices = numVertices;for (int i = 0; i < numVertices; i++) {graph->vertices[i] = 0;for (int j = 0; j < numVertices; j++) {graph->matrix[i][j] = 0;}}
}void addEdge(Graph* graph, int start, int end) {graph->matrix[start][end] = 1;graph->matrix[end][start] = 1;
}void DFS(Graph* graph, int vertex, bool visited[]) {visited[vertex] = true;printf("%d ", vertex);for (int i = 0; i < graph->numVertices; i++) {if (graph->matrix[vertex][i] == 1 && !visited[i]) {DFS(graph, i, visited);}}
}int main() {Graph graph;int numVertices = 4;initializeGraph(&graph, numVertices);addEdge(&graph, 0, 1);addEdge(&graph, 0, 2);addEdge(&graph, 1, 2);addEdge(&graph, 2, 0);addEdge(&graph, 2, 3);addEdge(&graph, 3, 3);bool visited[numVertices];for (int i = 0; i < numVertices; i++) {visited[i] = false;}printf("Depth First Traversal (starting from vertex 2):\n");DFS(&graph, 2, visited);printf("\n");return 0;
}

总结

本篇博客深入探讨了图的基本概念、邻接矩阵表示方法以及深度优先搜索算法的C语言实现。通过这些示例代码,您可以更好地理解图算法在表示和遍历图结构时的应用。图算法在社交网络分析、路径规划、游戏开发等领域具有广泛的应用,掌握这些算法将有助于您解决各种实际问题。

希望本文对您学习图算法和C语言编程有所帮助!如果您有任何问题或建议,请随时在评论区留言。


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

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

相关文章

C#的索引器

索引器 在 C# 中&#xff0c;索引器&#xff08;Indexer&#xff09;是一种特殊的属性&#xff0c;允许通过类的实例像访问数组一样访问对象的元素。索引器允许将类的实例作为集合来使用&#xff0c;可以按照自定义的方式访问类中的元素。 索引器的定义类似于属性&#xff0c…

wazuh环境配置及漏洞复现

目录 一、wazuh配置 1进入官网下载OVA启动软件 2.虚拟机OVA安装 二、wazuh案例复现 1.wazuh初体验 2.这里我们以SQL注入为例&#xff0c;在我们的代理服务器上进行SQL注入&#xff0c;看wazuh如何检测和响应 一、wazuh配置 1进入官网下载OVA启动软件 Virtual Machine (O…

Springboot使用Hibernate-search插件实现搜索

Hibernate search入门 原理是运用hibernate结合lucene来实现局部索引 1、引入jar包配置&#xff08;Hibernate和Lucene包&#xff09; <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-search-orm</artifactId> <…

2023国赛数学建模思路 - 案例:粒子群算法

文章目录 1 什么是粒子群算法&#xff1f;2 举个例子3 还是一个例子算法流程算法实现建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法&#xff1f; 粒子群算法&#xff08;Pa…

c# 方法参数修饰符(out、ref、in)的区别

在C#中&#xff0c;ref、out和in是三种方法参数修饰符&#xff0c;它们在传递参数的方式和作用上有所不同。 ref修饰符&#xff1a; 传递方式&#xff1a;使用ref修饰符的参数可以是输入输出参数&#xff0c;即在方法调用前后都可以对其进行修改。 作用&#xff1a;通过ref修…

js实现滚轮滑动到底部自动加载(完整版)

这里我们用vue实现(原生js相似), 这里我们用一个div当作一个容器; <div class="JL" @scroll="onScroll" ref="inin"> <div v-for="(item,index) in this.list" :key="index" > ....…

JavaScript:交集和差集的应用场景

在集合A和集合B中&#xff0c;属于集合A&#xff0c;同时也属于集合B的元素组成的集合&#xff0c;就是交集。 在A中所有不属于集合B元素&#xff0c;组合成集合&#xff0c;就是差集。 那么在平时的开发中&#xff0c;如何使用差集和交集来解决问题呢&#xff1f; 现在有这…

springboot小知识:配置feign服务超时时间

背景&#xff1a;当前项目通过feign服务调用了其他两个项目的接口&#xff0c;但是由于特殊需求&#xff0c;需要调整某一个项目的feign服务的默认超时时间&#xff1a; 默认连接超时10秒&#xff0c;默认读取超时时间 60秒 1.找到定义的FeignClient 2.根据FeignClient定义的名…

派森 #P128. csv存json格式

描述 编写一个 Python 程序&#xff0c;读取movie.in&#xff08;csv格式&#xff0c;utf-8编码&#xff09; 的数据&#xff0c;将数据转成保存到movie.out(接送格式&#xff0c;utf-8编码)文件中。 格式 输入 movie.in文件&#xff0c;测试格式&#xff0c;utf-8编码。 …

国内ChatGPT对比与最佳方案

很久没写内容了&#xff0c;主要还是工作占据了太多时间。简单分享下我这段时间的研究吧,由于时间仓促&#xff0c;有很多内容没有具体写&#xff0c;请自行到我分享的网站体验查看。 前言 ChatGPT 的出现确实在很大程度上改变了世界。许多人已经亲身体验到了ChatGPT作为一个…

GOLANG面向对象:封装 继承 多态

面向过程转换到面向对象&#xff0c;那么必然会涉及到几个特性&#xff1a;封装&#xff0c;继承&#xff0c;多态&#xff0c;那么Golang中的面向过程会有什么特性&#xff1f;那我们来仔细说一说&#xff1a; 封装&#xff1a; 首先要一个类的概念&#xff0c;类就像一下工厂…

HarmonyOS应用开发者高级认证练习题

系列文章目录 HarmonyOS应用开发者基础认证练习题 HarmonyOS应用开发者高级认证练习题 文章目录 系列文章目录前言一、判断二、单选三、多选 前言 本文所有内容来源于个人进行HarmonyOS应用开发者系列认证的学习过程中所做过的练习题&#xff0c;所有答案均是个人作答&#x…

iptables防火墙(SNAT与DNAT)

目录 1 SNAT 1.1 SNAT原理与应用 1.2 SNAT工作原理 1.3 SNAT转换前提条件 2 SNAT示例 ​编辑 2.1 网关服务器配置 2.1.1 网关服务器配置网卡 2.1.2 开启SNAT命令 2.2 内网服务器端配置 2.3 外网服务器端配置 2.4 网卡服务器端添加规则 2.5 SNAT 测试 3 DNAT 3.1 网卡…

wazuh环境配置及案例复现

文章目录 wazuh环境配置及案例复现wazuh环境配置 案例复现 wazuh环境配置及案例复现 wazuh环境配置 进入官网下载ova软件 https://documentation.wazuh.com/current/deployment-options/virtual-machine/virtual-machine.html 打开下载的ova&#xff0c;密码和用户名会显示…

2分钟搭建自己的GPT网站

如果觉得官方免费的gpt&#xff08;3.5&#xff09;体验比较差&#xff0c;总是断开&#xff0c;或者不会fanqiang&#xff0c;那你可以自己搭建一个。但前提是你得有gpt apikey。年初注册的还有18美金的额度&#xff0c;4.1号后注册的就没有额度了。不过也可以自己充值。 有了…

开发一个npm组件包

vue项目初始化 vue create mytest 启动项目以后 组件开发 开发的组件写在 package中 如下如例 开发一个 listpage的组件 里面放了一个a链接注册组件配置打包 "package": "vue-cli-service build --target lib ./src/package/index.js --name managerpage -…

linux文本三剑客

linux文本三剑客 1、grep2、sed 1、grep 过滤 参数用法作用-igrep -i STRING xxx.txt从xxx.txt文件查找不区分大小写STRING-wgrep -w STRING xxx.txt精确匹配STRING-egrep -e STRING1 -e STRING2 xxx.txt查找多个STRING行-ngrep -n STRING xxx.txt查看STRING 在第几行-vgrep …

使用mysql:5.6和 owncloud 镜像,构建一个个人网盘。

文章目录 1、使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘。2、安装搭建私有仓库 Harbor3、编写Dockerfile制作Web应用系统nginx镜像&#xff0c;生成镜像nginx:v1.1&#xff0c;并推送其到私有仓库。具体要求如下&#xff1a;4、Dockerfile快速搭建自己专属的L…

统计学补充概念07-比较树

概念 在层次聚类中&#xff0c;聚类结果可以以树状结构表示&#xff0c;通常称为树状图&#xff08;Dendrogram&#xff09;。树状图展示了数据点如何被合并或分裂以形成聚类的层次结构。通过观察树状图&#xff0c;可以更直观地理解数据点之间的相似性和关系。 在比较树状图…

【每日一招小技巧】编译安装提升系统自带的java版本

hello&#xff0c;大家好&#xff0c;又到了每日一招的环节&#xff0c;今天要给大家介绍的是&#xff0c;如何用源码安装的方式&#xff0c;升级系统自带的ava版本&#xff01; 首先&#xff0c;我们要查看一下我们系统自带的java版本是多少&#xff0c;怎么查看呢&#xff1…