邻接表存储无向图

news2024/10/9 18:14:51

设无向图G有n个顶点,m条边。试编写用连接表存储该图的算法。

思想:对图中的每个顶点vi建立一个单链表。第i个单链表中的结点表示依附于顶点vi的边,这个单链表就称为顶点vi的边表,边表的头指针和顶点的数据信息采用顺序存储(称为顶点表)。

代码:

typedef char GElemType;
typedef struct ArcNode{
 	int adjvex;  //该边所指向的顶点的位置 
 	struct ArcNode *next;//指向下一条边的指针 
}ArcNode;

//顶点的结点结构 
typedef struct VNode{
 	GElemType data;//顶点信息、
 	ArcNode *first;//指向第一条依附该顶点的边的指针 
}VNode,AdjList[MVNum];//AdjList表示邻接表类型

//图的结构定义 
typedef struct{
 	VNode *vertices; //定义一个数组vertices,是vertex的复数形式
 	int vexNum,arcNum; //图的当前顶点数和弧数
}ALGraph;

typedef struct{
	GElemType a,b;
}Edge;

//返回结点对应的数组下标
//V[];结点数组,data:需要查询的结点值,n:数组长度 
int GraphLocateVertex(VNode v[],GElemType data,int n){
	for(int i=0;i<n;i++){
		if(v[i].data==data) return i;
	}
	return -1;
}

//numV:顶点数, numEdges:边数, nodes:顶点序列, edges:边序列 
ALGraph* buildAdjacencyList(int numV,int numEdges,GElemType *nodes,Edge *edges){
	ALGraph *G=(ALGraph*)malloc(sizeof(ALGraph));//定义图
	
	G->arcNum = numEdges; //边数
	G->vexNum numV; //顶点数
	
	G->vertices = (VNode*)malloc(sizeof(VNode));//初始化顶点
	for(int i=0;i<numV,i++){//输入顶点信息 
		G->vertices[i].data= nodes[i];//输入顶点值 
		G->vertices[i].first= NULL ;//初始化表头结点的指针域
	} 
	
	for(int k=0;k<numEdges;k++){//处理边 
		//获取顶点对应的数组下标
		int i = GraphLocateVertex(G->vertices,edges[k].a,numV);
		int j = GraphLocateVertex(G->vertices,edges[k].b,numV);
		
		ArcNode* arcb = (ArcNode*)malloc(sizeof(ArcNode));//声明表顶点,存b
		arcb->adjvex=j;//设置邻接顶点
		arcb->next=G-vertices[i].first;//头插法插到表i中
		G->vertices[i].first=arcb;
		
		ArcNode* arca = (ArcNode*)malloc(sizeof(ArcNode));//声明表顶点,存a
		arca->adjvex=i;//设置邻接顶点
		arca->next=G-vertices[j].first;//头插法插到表i中
		G->vertices[j].first=arca;
		 
	} 
	return G;
}

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

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

相关文章

海洋鱼类图像分类分割系统源码&数据集分享

海洋鱼类图像分类分割系统源码&#xff06;数据集分享 [yolov8-seg-slimneck&#xff06;yolov8-seg-attention等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Globa…

MySQL联合索引、索引下推Demo

1.联合索引 测试SQL语句如下&#xff1a;表test中共有4个字段(id, a, b, c)&#xff0c;id为主键 drop table test;#建表 create table test(id bigint primary key auto_increment,a int,b int,c int )#表中插入数据 insert into test(a, b, c) values(1,2,3),(2,3,4),(4,5,…

数据分析Power BI设置万为单位的数据

玩过Power BI的同学都知道&#xff0c;power BI在度量值设置单位里&#xff0c;唯独没有万这个单位&#xff0c;但是我们可以自定义&#xff0c;操作过程如下&#xff1a; 1.用DAX新建单位表 单位 SELECTCOLUMNS( { ( "元", 1), ("万",10000), ("千…

清华大学经管学院朱武祥教授:五步构建高效的数据飞轮,提升企业核心竞争力

面对AI时代的到来&#xff0c;企业应积极拥抱这一变革&#xff0c;构建和优化自身的数据飞轮&#xff0c;让飞轮高速转动起来&#xff0c;为企业的创新发展持续赋能。 近期&#xff0c;清华管理评论发表了一篇名为《AI时代如何构建数据飞轮》的文章&#xff0c;引起了我们的重点…

Java 根据字符生成背景透明的图片

上代码 package com.example.demotest.controller;/*** Author shaolin* Date 2024-10-08 10:11**/import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.WritableRaster; impor…

手机 电脑 Pad 是如何得到IP地址的呢? 如何让你的设备自动获取IP地址?DHCP :给你 IP 地址的隐形人

我们每天都是用手机 电脑 Pad 一系列电子设备连接到网络中&#xff0c;然后网络中的每一个设备都有一个独一无二的IP地址&#xff0c;用来作为网络中的唯一标识&#xff0c;那这些设备上的IP地址是如何得到的呢&#xff1f; 在现代网络中&#xff0c;每一台设备都需要一个唯一的…

Kubernetes----基础命令合集

目录 一、命令概述 1.1命令分类 1.2 基本语法 二、查看基本信息 2.1 环境指令 2.1.1 查看版本信息 2.1.2 查看资源对象简写 2.1.3 添加补全信息 2.1.4 查看日志 2.1.5 查看集群信息 2.2 查看资源信息 2.2.1 获取资源相关信息 ① 查看集群组件状态 ② 查看命名空间…

7个维度点剖析地图投影 第6个最重要

摘要: 地图投影在制图学和地理信息系统 (GIS) 中发挥着至关重要的作用。然而,即使是地理空间行业中经验最丰富的专业人士,它们也常常令人们感到困惑。在大多数情况下,也许必须返回参考文档和材料来重新检查这些问题。 因此有许多令人费解的现象,例如您是否曾经看过世界地..…

nginx代理,nginx301跳转,nginx地址重写

ngin代理 假如你的地址是:http://192.168.1.2:8282 你的域名是:www.jjycheng.com 你想访问域名www.jjycheng.com时,实际请求的地址是http://192.168.1.2:8282,但浏览器上的地址不变。 此时,你用到的技术就是请求代理 代理.conf配置 http {server {listen 80; server_na…

【Parsec】一款安全高效的远程桌面软件

Parsec 是一款远程桌面软件&#xff0c;它允许用户通过P2P&#xff08;点对点&#xff09;技术远程访问和控制另一台计算机。以下是Parsec的一些主要作用、安全私密性特点以及优缺点&#xff1a; 作用&#xff1a; 远程游戏&#xff1a;用户可以远程访问高性能PC进行游戏&am…

Centos7.5 安装和配置jdk17

目录 一、下载JDK17包 二、将安装包放入服务器 三、解压jdk包到/usr/lib/jvm 四、修改JDK环境配置 1、打开配置文件 2、最后一行插入 3、立即生效 4、检查版本 一、下载JDK17包 访问网址:Java Downloads | Oraclehttps://www.oracle.com/java/technologies/downloads…

新硬盘第一次使用需要怎样做?

无论是组装新电脑&#xff0c;还是给现有电脑增加存储空间&#xff0c;我们需要进行一些安装硬盘和设置硬盘的操作。对于没有相关经验的用户来说&#xff0c;对于拿到手的新硬盘会感到手足无措&#xff0c;不知道应该从哪里开始。今天小编详细介绍一下新硬盘第一次使用时的流程…

中国内地高校2023年度捐赠收入排名更新 | 浙大领跑,宁波东方理工成最大黑马!

社会捐赠是世界一流大学办学经费的重要来源之一&#xff0c;也是评价世界一流大学的核心指标之一。 9月21日&#xff0c;支持湘潭大学建设捐赠与合作签约仪式暨“校友回湘”推进会议举行。株洲华锐精密工具股份有限公司向学校捐赠湘潭大学“华锐精密”研究院以及现金人民币&am…

基于springboot+vue的协同过滤电影推荐系统

一、系统架构 前端&#xff1a;vue2 | element-ui | html 后端&#xff1a;springboot | mybatis 环境&#xff1a;jdk1.8 | mysql | maven | node 二、代码及数据库 三、功能介绍 01. web端-首页1 02. web端-首页2 03. web端-注册 04. web端-登录 05…

GC9008为什么能替代MX6208应用于红外开关,电流开关上

GC9008作为一种新型集成电路&#xff0c;具备了多个方面的优势&#xff0c;使其能够有效替代MX6208。以下是GC9008替代MX6208的主要原因及其优势&#xff1a; 1. 更低的功耗 优势&#xff1a;GC9008在设计上进行了优化&#xff0c;能够在更低的电压下运行&#xff0c;从而显著…

以 AI 强化学习优化双边交易与借贷投资组合

作者:老余捞鱼 原创不易,转载请标明出处及原作者。 写在前面的话: 本研究提出基于强化学习的高风险环境投资组合管理模型,采用新环境公式和基于利润损失的奖励函数,用 Soft Actor-Critic 代理和卷积神经网络实现,管理 12 种加密资产投资组合并在 Binance 永续期货…

CTFshow 命令执行 web37-web40

目录 web37 方法一&#xff1a;php://input 方法二&#xff1a;data协议 web38 web39 web40 方法一&#xff1a;构造文件读取 方法二&#xff1a;构造数组rce web37 error_reporting(0); if(isset($_GET[c])){$c $_GET[c];if(!preg_match("/flag/i", $c)){incl…

Gin框架中实现路由分组

在Gin框架中实现路由分组非常简单&#xff0c;你可以使用Group方法来创建一个分组&#xff0c;然后在这个分组中定义相关的路由。 分组可以包含中间件、路由前缀等&#xff0c;这使得路由的组织和管理变得非常方便&#xff0c;尤其是在大型项目中。 使用Gin框架实现路由分组的…

鹧鸪云光伏软件全面解析

一、主要功能 光伏电站常用工具&#xff1a; 投融资估算&#xff1a;帮助用户进行光伏电站项目的投资预算和融资规划。 发电量计算&#xff1a;根据光伏电站的设计参数和当地气候条件&#xff0c;计算电站的发电量。 安装倾角测算&#xff1a;根据屋顶朝向和地理位置&#…

欢迎加入凌鸥学园

&#x1f393;免费学习&#xff0c;荣誉加冕 凌鸥学园提供免费的电机控制课程&#xff0c;从基础到专业&#xff0c;全程无负担。 &#x1f4da;全面课程体系&#xff0c;灵活学习模式 凌鸥学园提供从基础到专业的全面课程体系&#xff0c;每个等级的课程都经过精心设计&#…