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. …...
Java 通过枚举类减少if else
目录 一. 案例1二. 案例2三. 案例3四. 案例4 枚举类聚合封装消息 一. 案例1 涉及到EnumMap的实际使用 ⏹定义一个枚举类,用来表示日本的各种支付方法对应的code import com.fasterxml.jackson.annotation.JsonFormat;// 让jackson将前台的数据封装数据到枚举类中 J…...
单链表---移除链表元素
对于无头单向不循环链表,给出头结点head与数值val,删除链表中数据值val的所有结点 #define ListNodeDataType val struct ListNode { struct ListNode* psll;ListNodeDataType val; } 方法一---遍历删除 移除所有数值为val的链表结点,…...
认识redis 及 Ubuntu安装redis
文章目录 一. redis概念二. redis应用场景二. redis的特性四. 使用Ubuntu安装redis 一. redis概念 redis 是在内存中存储数据的中间件, 用在分布式系统 redis是客户端服务器结构的程序, 客户端服务器之间通过网络来通信 二. redis应用场景 redis可用作数据库 类似MySQL, 但…...
Java开发网络安全常见问题
1、敏感信息明文传输 用户敏感信息如手机号、银行卡号、验证码等涉及个人隐私的敏感信息不通过任何加密直接明文传输。 如下图中小红书APP 的手机短信验证码登录接口,此处没有对用户手机号和验证码等信息进行加密传输,可以很简单的截取并开展一些合法的…...
C#基础之委托,事件
文章目录 1 委托1.1 简介1.2 操作使用1.2.1 声明委托(Delegate)1.2.2 实例化委托(Delegate)1.2.3 直接调用和invoke1.2.4 Invoke 和 BeginInvoke 1.3 委托的多播1.4 委托的匿名和lambda1.4.1 匿名方法1.4.2 lambda 表达式 1.5 内置…...
nginx配置静态资源的访问
比如静态资源图片位于/mnt/software/nginx/html/static/images目录下,那么nginx.conf中的配置则为: # 静态文件目录 location /static/images/ { root /mnt/software/nginx/html; try_files $uri $uri/ 404; #找不到时提示404 …...
JS的魔法三角:constructor、prototype与__proto__
在JavaScript中,constructor、prototype和__proto__是与对象创建和继承机制紧密相关的三个概念。理解它们之间的关系对于掌握JavaScript的面向对象编程至关重要。下面将详细介绍这个魔法三角: 1. constructor 定义:constructor是一个函数&am…...
CA系统(file.h---申请认证的处理)
#pragma once #ifndef FILEMANAGER_H #define FILEMANAGER_H #include <string> namespace F_ile {// 读取文件,返回文件内容bool readFilename(const std::string& filePath);bool readFilePubilcpath(const std::string& filePath);bool getNameFro…...
matlab显示sin二维图
1,新建脚本 2、保存脚本 3、脚本命令:clc 清除 脚本命令的信息 clrear all 清除全部 4工作区内容:变量啥的 x0:0.001:2*pi%% 开始 精度 中值 ysin(x) y1cos(x) figure%%产生一个屏幕 plot(x,y)%%打印坐标 title(ysin(x))%%标题 xlabel(…...
验证 kubelet 服务已经停止并且不再生成错误日志
要验证 kubelet 服务已经停止并且不再生成错误日志,可以按照以下步骤进行操作: 1. 检查 kubelet 服务状态 首先,确认 kubelet 服务已经停止。 Bash 深色版本 sudo systemctl status kubelet 你应该看到类似以下的输出,表示服…...
建筑模板生产设备/莱阳seo排名
在上秦小麟老师的数据库实现技术的时候,老师提到了一个问题:如何在运行时获取一个变量的类型,这用C实现好像要大费周折。今天正好碰到一个问题想看看CSTL中的sort算法的实现,发现里面有个技巧可以很容易做到这一点。我就立刻自己做…...
手机上安装wordpress/网站制作的流程是什么
目录 一、路由简介 1.1 vue-router 的理解 1.2 对SPA应用的理解 1.3 路由的理解 1.3.1 什么是路由 1.3.2 路由的分类 二、路由基本使用 2.1 安装vue-router 2.2 引用vue-router 2.3 编写router配置项 2.4 实现切换(active-class可配置高亮样式࿰…...
wordpress 设置缓存/网站seo排名优化工具
1、说话要有亲和力 接待顾客最好能够懂得幽默,不要一味地给顾客推荐水果,适当的和客人聊聊家常,能够增加顾客对你的好感,提高客人的回头率。自己努力做好品质,不可能所有人都喜欢你这家店,来你们家店消费&…...
网站播放mp3代码/优秀网站设计案例
1.PCB板材要求 普通板材采用FR4板材,背板采用高TG的FR4板材; 2.PCB表面工艺 沉金工艺,墨绿色哑光阻焊,白色丝印; 3.PCB尺寸、外形要求 PCB外形、尺寸与接口位置要在结构允许范围内,可以和结构工程师及时沟…...
西双版纳网站建设/百度应用下载安装
计算机网络(第一章) 互联网 特指Interenet,起源于美国,现已发展称为世界上最大的、覆盖全球的计算机网络 计算机网络(简称网络) 由若干结点(node)和连接这些结点的链路(link&…...
网页设计与制作软件下载/奶糖 seo 博客
感谢 公众号 / PS制作小教程 的分享!效果图:素材:操作步骤:1、打开PS,新建任意大小画布,然后给背景设置渐变,颜色就看自己个人爱好,输入字体KELE,如图2、然后右键文字图层࿰…...