22智能 图
例题
根据下列顶点之间的关系,画出相应的图结构
A -> B, C, D
B -> A, C,
C -> A, D, E,
D -> B, E,
E -> C,
数据结构:使用邻接表表示图,每个顶点有一个链表来存储与它相邻的顶点。
功能:
创建图。
添加边。
打印邻接表。
执行广度优先搜索(BFS)。
#include <stdio.h> // 包含标准输入输出库
#include <stdlib.h> // 包含标准库函数,如 malloc 和 free// 定义链表节点结构体
typedef struct ListNode {int value; // 节点的值struct ListNode* next; // 指向下一个节点的指针
} ListNode;// 定义图的邻接表结构体
typedef struct {int vertex; // 顶点编号ListNode* adjList; // 邻接链表的头指针
} AdjacencyList;// 图结构体
typedef struct {int numVertices; // 顶点数量AdjacencyList* adjLists; // 邻接表数组
} Graph;// 创建链表节点的函数
ListNode* createListNode(int value) {ListNode* newNode = (ListNode*)malloc(sizeof(ListNode)); // 分配内存newNode->value = value; // 初始化节点值newNode->next = NULL; // 初始化指针return newNode; // 返回新节点
}// 创建图的函数
Graph* createGraph(int vertices) {Graph* graph = (Graph*)malloc(sizeof(Graph)); // 分配内存graph->numVertices = vertices; // 初始化顶点数量graph->adjLists = (AdjacencyList*)malloc(vertices * sizeof(AdjacencyList)); // 分配邻接表数组内存for (int i = 0; i < vertices; i++) {graph->adjLists[i].vertex = i; // 初始化顶点编号graph->adjLists[i].adjList = NULL; // 初始化邻接链表为空}return graph; // 返回图结构
}// 添加边的函数
void addEdge(Graph* graph, int src, int dest, int bidir) {// 添加从 src 到 dest 的边ListNode* newNode = createListNode(dest); // 创建新节点newNode->next = graph->adjLists[src].adjList; // 将新节点插入到邻接链表头部graph->adjLists[src].adjList = newNode;if (bidir) { // 如果是双向图// 添加从 dest 到 src 的边newNode = createListNode(src); // 创建新节点newNode->next = graph->adjLists[dest].adjList; // 将新节点插入到邻接链表头部graph->adjLists[dest].adjList = newNode;}
}// 打印邻接表的函数
void printAdjList(Graph* graph) {for (int i = 0; i < graph->numVertices; i++) {printf("%d -> ", graph->adjLists[i].vertex); // 打印顶点编号ListNode* temp = graph->adjLists[i].adjList; // 获取邻接链表头指针while (temp) {printf("%d, ", temp->value); // 打印邻接节点值temp = temp->next; // 移动到下一个节点}printf("\n"); // 换行}
}// 广度优先搜索的函数
void bfs(Graph* graph, int src) {int* visited = (int*)calloc(graph->numVertices, sizeof(int)); // 分配访问标记数组内存int queue[graph->numVertices]; // 定义队列int front = 0, rear = 0; // 初始化队列的前后指针visited[src] = 1; // 标记源节点已访问queue[rear++] = src; // 将源节点入队while (front != rear) { // 当队列不为空时int node = queue[front++]; // 出队一个节点printf("%d, ", node); // 打印节点值ListNode* temp = graph->adjLists[node].adjList; // 获取当前节点的邻接链表头指针while (temp) {if (!visited[temp->value]) { // 如果邻接节点未被访问visited[temp->value] = 1; // 标记邻接节点已访问queue[rear++] = temp->value; // 将邻接节点入队}temp = temp->next; // 移动到下一个邻接节点}}free(visited); // 释放访问标记数组内存
}int main() {int vertices = 6; // 定义顶点数量Graph* graph = createGraph(vertices); // 创建图// 添加边addEdge(graph, 0, 1, 1); // 添加边 (0, 1)addEdge(graph, 1, 2, 1); // 添加边 (1, 2)addEdge(graph, 0, 4, 1); // 添加边 (0, 4)addEdge(graph, 2, 4, 1); // 添加边 (2, 4)addEdge(graph, 2, 3, 1); // 添加边 (2, 3)addEdge(graph, 3, 5, 1); // 添加边 (3, 5)addEdge(graph, 3, 4, 1); // 添加边 (3, 4)printf("The Graph is:\n"); // 打印图的信息printAdjList(graph); // 打印邻接表printf("\n");printf("The Breadth First Search from Node 0:\n"); // 打印广度优先搜索结果bfs(graph, 0);// 释放图的内存for (int i = 0; i < vertices; i++) {ListNode* temp = graph->adjLists[i].adjList; // 获取邻接链表头指针while (temp) {ListNode* toFree = temp; // 保存当前节点temp = temp->next; // 移动到下一个节点free(toFree); // 释放当前节点内存}}free(graph->adjLists); // 释放邻接表数组内存free(graph); // 释放图结构内存return 0; // 程序结束
}
代码注释说明
头文件包含:
- #include <stdio.h>:包含标准输入输出库。
- #include <stdlib.h>:包含标准库函数,如 malloc 和 free。
结构体定义:
- ListNode:定义链表节点结构体。
- AdjacencyList:定义图的邻接表结构体。
- Graph:定义图结构体。
函数定义:
- createListNode:创建链表节点。
- createGraph:创建图。
- addEdge:添加边。
- printAdjList:打印邻接表。
- bfs:广度优先搜索。
主函数:
- 创建图并添加边。
- 打印图的邻接表。
- 执行广度优先搜索。
- 释放图的内存。
相关文章:
22智能 图
例题 根据下列顶点之间的关系,画出相应的图结构 A -> B, C, D B -> A, C, C -> A, D, E, D -> B, E, E -> C, 数据结构:使用邻接表表示图,每个顶点有一个链表来存储与它相邻的顶点。 功能: 创建图。 添加边。 打…...
Springfox、Swagger 和 Springdoc
Springfox、Swagger 和 Springdoc 是用于在 Spring Boot 项目中生成 API 文档的工具,但它们之间有显著的区别和演进关系: 1. Swagger 简介 Swagger 是一个开源项目,旨在为 RESTful APIs 提供交互式文档。最早由 SmartBear 开发,…...
编程基础篇
什么是编程? 原文地址 :样式不太熟悉,有点单一,原文地址 一千个人眼中有一千个哈姆雷特,以下是我眼中的编程: A每天出门需要关一下空调,在家喜欢室内温度在 20左右,6 点左右会打开灯…...
GPT视角下,如何在密码学研究中找到属于你的方向?
(本文所有内容由GPT生成)在密码学领域发现关键性的研究方向并成为一位优秀的密码学研究员,需要结合对领域趋势的洞察、扎实的理论基础以及创新的研究思维。以下是具体步骤和方法: 一、发现关键性研究方向 关注领域前沿动态 顶级会…...
【经典】星空主题的注册界面HTML,CSS,JS
目录 界面展示 完整代码 说明: 这是一个简单的星空主题的注册界面,使用了 HTML 和 CSS 来实现一个背景为星空效果的注册页面。 界面展示 完整代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8&…...
Linux学习——4_WEB服务器的部署及优化
WEB服务器的部署及优化 用户常用关于web信息 什么是www www是world wide web的缩写,即万维网,也就是全球信息广播 通常说的上网就是使用www来查询用户所需要的信息。 www可以结合文字、图形、影像以及声音等多媒体,超链接的方式将信息以…...
《Vue 组件化开发:构建可复用的模块》
一、Vue 组件化开发概述 组件化是 Vue.js 的核心概念之一,它允许将界面拆分成独立、可复用的组件,使得开发大型应用变得更加简单和高效。 组件的定义是实现应用中局部功能代码和资源的集合。Vue.js 的组件化用于将 UI 页面分割为若干组件进行组合和嵌套…...
贪心算法理论
系列博客目录 文章目录 系列博客目录贪心算法 (Greedy Algorithm)贪心算法的特点贪心算法的适用条件常见的贪心算法问题贪心算法的步骤贪心算法示例:活动选择问题贪心算法的优缺点 贪心算法 (Greedy Algorithm) 贪心算法是一种在每一步选择中都采取当前状态下最优的…...
JVM之Synthetic
Synthetic是人造,合成的意思,在虚拟机很多地方使用ACC_SYNTHETIC表示编译器自动生成的,区别于我们自己写的程序代码。这样说可能比较模糊,我们举个例子:我们创建一个内部类,如下 public class TestInnerCl…...
HCIE IGP双栈综合实验
实验拓扑 实验需求及解法 本实验模拟ISP网络结构,R1/2组成国家骨干网,R3/4组成省级网络,R5/6/7组成数据中 心网络。 配置所有ipv4地址,请自行测试直连。 R1 sysname R1 interface GigabitEthernet0/0/0ip address 12.1.1.1 255.…...
【k8s】监控metrics-server
metrics-server介绍 Metrics Server是一个集群范围的资源使用情况的数据聚合器。作为一个应用部署在集群中。Metric server从每个节点上KubeletAPI收集指标,通过Kubernetes聚合器注册在Master APIServer中。为集群提供Node、Pods资源利用率指标。 就像Linux 系统一样…...
第六届国际科技创新学术交流会暨管理科学信息化与经济创新发展(MSIEID 2024)
重要信息 大会官网:msieid2024.iaecst.org (点击了解大会,参会等内容) 大会时间:2024年12月6-8日 大会地点:中国-广州 大会简介 随着全球化和信息化的不断深入,管理科学、信息化和经济发展…...
将面具贴到人脸上的过程
使用OpenCV进行人脸面具贴合和变形以适应人脸的3D透视角度,通常需要以下步骤: 人脸检测:首先需要检测图像中的人脸位置。特征点检测:在检测到的人脸区域中,找到关键特征点,如眼睛、鼻子、嘴巴等。透视变换…...
【Maven】Nexus私服
6. Maven的私服 6.1 什么是私服 Maven 私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的远程仓库(中央仓库、其他远程公共仓库)。一些无法从外部仓库下载到的构件,如项目组其他人员开发的…...
AI高中数学教学视频生成技术:利用通义千问、MathGPT、视频多模态大模型,语音大模型,将4个模型融合 ,生成高中数学教学视频,并给出实施方案。
大家好,我是微学AI,今天给大家介绍一下AI高中数学教学视频生成技术:利用通义千问、MathGPT、视频多模态大模型,语音大模型,将4个模型融合 ,生成高中数学教学视频,并给出实施方案。本文利用专家模…...
探索温度计的数字化设计:一个可视化温度数据的Web图表案例
随着科技的发展,数据可视化在各个领域中的应用越来越广泛。在温度监控和展示方面,传统的温度计已逐渐被数字化温度计所取代。本文将介绍一个使用Echarts库创建的温度计Web图表,该图表通过动态数据可视化展示了温度值,并通过渐变色…...
windows电脑上安装树莓派操作系统
在Windows电脑上安装树莓派通常涉及以下几个步骤:准备安装工具、下载树莓派系统镜像、烧录系统到SD卡、配置树莓派以及远程连接(如果需要无显示器操作)。以下是详细的步骤说明: 一、准备安装工具 安装树莓派官方烧录工具: 下载并安装Raspberry Pi Imager。这是一个官方的…...
交换机四大镜像(端口镜像、流镜像、VLAN镜像、MAC镜像)应用场景、配置实例及区别对比
在网络管理中,端口镜像、流镜像、VLAN镜像和MAC镜像都是用于监控和分析网络流量的重要技术。 端口镜像(Port Mirroring) 定义:端口镜像是将一个或多个源端口的流量复制到一个目标端口,以便于网络管理员能够监控和分析…...
我不是挂王-用python实现燕双鹰小游戏
一.准备工作 1.前言提要 作为程序员在浩瀚的数字宇宙中,常常感觉现实世界是一台精密运作的虚拟机,其底层的物理逻辑如同铁律般难以撼动。然而我们拥有在虚拟世界中自由驰骋、创造无限可能的独特力量。突发奇我想用Python写出燕双鹰的小游戏,这样想想就很…...
Java:反射、注解
文章目录 1. 反射1-1. 获取Class对象的三种方式1-2. 获取类的构造器、实例化对象1-3. 获取类的成员变量1-4. 获取类的成员方法 2. 注解2-1. 元注解2-2. 解析注解 1. 反射 反射:加载类,并允许以编程的方式解剖类中的各种成员变量、方法、构造器。 1-1. …...
从入门到精通:Systrace性能分析实战指南
1. Systrace入门:认识Android性能分析利器 第一次打开Systrace报告时,我完全被那些彩色线条和条形图搞懵了。这玩意儿看起来就像地铁线路图一样复杂,但别担心,它其实是Android开发者最得力的性能分析助手。Systrace是Android SDK自…...
【2024独家首发】Red Cabbage印相参数矩阵表:17组实测--no stylize值×--sref权重×色域压缩阈值,精准复现植物染料氧化还原曲线
更多请点击: https://intelliparadigm.com 第一章:Red Cabbage印相的化学机理与Midjourney参数映射原理 花青素的pH响应性与图像显影基础 红甘蓝(Red Cabbage)提取液富含花青素(anthocyanin),…...
CANN/asc-devkit单核形状API文档
SetSingleShape 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode…...
从愚人节实验室踩踏事件看资源分配、排队制度与群体行为管理
1. 项目概述:一个愚人节引发的实验室“踩踏事件” 在任何一个技术驱动的组织里,无论是大型研究院、芯片设计公司,还是一个初创的硬件团队,资源分配永远是一个微妙而充满博弈的话题。设备、工具、甚至是某个紧俏的软件许可证&#…...
Proteus仿真新手必看:从电容单位到LCD1602,这份常用元器件清单帮你快速上手
Proteus仿真实战指南:从零搭建你的第一个电子电路 刚接触Proteus的电子爱好者们,面对软件里密密麻麻的元器件库,是不是有种"大海捞针"的感觉?别担心,这份指南将带你快速锁定核心元器件,用最直接的…...
Base64编码实战:手把手教你用PHPStudy环境在本地调试图片/PDF内联显示
Base64编码实战:手把手教你用PHPStudy环境在本地调试图片/PDF内联显示 在Web开发中,Base64编码是一种常见的数据处理方式,它可以将二进制数据(如图片、PDF等)转换为可打印的ASCII字符串,从而方便地在HTML中…...
Win10系统下Rational Rose 2003完整安装与激活指南(含资源与排错)
1. 准备工作:获取安装包与工具 在Win10系统上安装Rational Rose 2003确实是个技术活,我前前后后折腾了三四次才搞定。首先要解决的就是安装包问题,这个老软件现在官方渠道已经很难找到了。建议直接使用百度网盘资源,下载速度相对稳…...
工业网关、电机控制、人机界面:ATSAME70Q21B-AN的应用版图
ATSAME70Q21B-AN:300MHz Cortex-M7工业MCU的嵌入式应用解析在工业控制、人机界面和物联网网关等领域,微控制器需要在处理性能、外设集成度和环境适应性之间取得平衡。ATSAME70Q21B-AN是Microchip推出的基于ARM Cortex-M7内核的高性能32位微控制器&#x…...
5分钟极速上手:用BepInEx打造你的专属游戏世界
5分钟极速上手:用BepInEx打造你的专属游戏世界 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx 想象一下,你刚入手了一款心仪已久的游戏,但总觉得…...
AI原生Next.js启动器:集成Claude与Cursor的现代前端开发模板
1. 项目概述:一个为AI时代开发者量身定制的Next.js启动器如果你和我一样,每天都在和Next.js、TypeScript、Tailwind CSS打交道,同时又在频繁地与Claude、Cursor、Copilot这些AI编程助手“对话”,那你肯定也遇到过类似的烦恼&#…...
