图的邻接矩阵,邻接表的C语言实现(408真题)

news2024/11/18 20:43:05

图的邻接矩阵

数据结构定义

#define MAXV 50;//顶点数目的最大值 
typedef struct{
	int vex[MAX];			//顶点表 
	int edge[MAXV][MAXV];	//邻接矩阵 
	int edgeNum,vexNum; 	//图中实际的边数和顶点数 
}MGraph;

初始化

void Matrix_Init(MGraph *Mgraph) {
	int v1, v2;//存储有边的两个顶点的序号,注意:顶点序号是从1开始
	printf("请输入顶点数和边数:");
	scanf("%d%d", &Mgraph->vexNum, &Mgraph->edgeNum);
	printf("请输入每个顶点的值(一次性输入):");
	for (int i = 0; i < Mgraph->vexNum; i++)
	{
		scanf("%d", &Mgraph->vex[i]);
	}
	for (int i = 0; i < Mgraph->edgeNum; i++)
	{
		for (int j = 0; j < Mgraph->edgeNum; j++)
		{	//任意两个顶点之间的边初始化为0,表示现在还没有一条边
			Mgraph->edge[i][j] = 0;
		}
	}
	for (int i = 0; i < Mgraph->edgeNum; i++)
	{
		printf("请输入有边相连的两个顶点的序号(输入一对就回车):");
		scanf("%d%d", &v1, &v2);
		Mgraph->edge[v1 - 1][v2 - 1] = 1;
		Mgraph->edge[v2 - 1][v1 - 1] = 1;//因为是无向图,所以该邻接矩阵是对称的
	}
}

2021年408算法题

题目

//EL路径:图中存在一条路径经过所有边,且每条边都只经过了一次
//算法思想:遍历邻接矩阵,统计**度为奇数的顶点个数**,若有0个或2个这样的顶点,返回1,否则返回0
int IsExistEL(MGraph G){
	int count = 0; //度为奇数的顶点个数 
	for(int i = 0; i<G.numVertices; i++){
		degree = 0;
		for(int j = 0; j<G.numEdges; j++){
			degree+= G.Edge[i][j]; //累加顶点的度 
		}
		if(degree%2==1){
			count++; //统计度为奇数的顶点个数  
		}
	}
	if(count == 0 || count == 2){
		return 1;
	}else{
		return 0;
	} 
}  

2023年408算法题

题目

//算法思想:分别按行按列遍历邻接矩阵,得到顶点的出度和入度,若出度大于入度则输出
int printVertices(MGraph G){
	int count = 0; //K顶点个数 
	for(int i = 0; i<G.numVertices; i++){
		int indegree = 0;
		int outdegree = 0;
		for(int j = 0; j<G.numEdges; j++){
			//统计出度
			outdegree+=G.Edge[i][j];
		}
		fot(int j = 0; j<G.numEdges; j++){
			//统计入度 
			indegree+=G.Edge[j]i]; 
		}
		
		if(outdegree>indegree){
			printf("%c",G.VerticesList[i]); 
			count++;
		}
	}
	return count;
}  

邻接表

数据结构定义

#define MAXV 50;//顶点数目的最大值
//邻接表法
typedef struct ArcNode {
	int adjvex;				 	//弧所指向的顶点的位置
	//int weight;				//若边有权值 
	struct ArcNode* nextArc; 	//指向下一条弧的指针
}ArcNode;
typedef struct{
	int vex;					//顶点的值 
	ArcNode* firstArc;			//该顶点指向第一条边的指针 
}VertexNode;
typedef struct{
	VertexNode adjlist[MAXV];	//顶点表 
	int vexNum, arcNum;			//图中实际的顶点数和边数 
}ALGraph;

初始化

void AdjList_Init(ALGraph &ALgraph) {
	int v1, v2;//存储有边的两个顶点的序号,注意:顶点序号是从1开始,c语言数组下标从0开始
	ArcNode *pNew1,*pNew2;//用来创建边结点,因为是无向图,所以创建两个
	printf("请输入顶点数和边数:");
	scanf("%d%d", &ALgraph.vexNum, &ALgraph.arcNum);
	printf("请输入每个顶点的值:");
	for (int i = 0; i < ALgraph.vexNum; i++)
	{
		scanf("%d", &ALgraph.adjlist[i].vex);//输入顶点的值
		ALgraph.adjlist[i].firstArc = NULL;//表示所有顶点之间还没有边相连
	}
	for (int i = 0; i < ALgraph.arcNum; i++)
	{
		printf("请输入有边的两个顶点:");
		scanf("%d%d", &v1, &v2);
		pNew1 = (ArcNode*)malloc(sizeof(ArcNode));//创建一个边结点
		pNew1->adjvex = v2 - 1; //边所指向的顶点的位置(c语言数组下标从0开始)
		pNew1->nextArc = ALgraph.adjlist[v1 - 1].firstArc; //头插法
		ALgraph.adjlist[v1 - 1].firstArc = pNew1;

		//因为是无向图,所以v2顶点的边表也要进行插入
		pNew2 = (ArcNode*)malloc(sizeof(ArcNode));
		pNew2->adjvex = v1 - 1; //边所指向的顶点的位置(从0开始的)
		pNew2->nextArc = ALgraph.adjlist[v2 - 1].firstArc;
		ALgraph.adjlist[v2 - 1].firstArc = pNew1;
	}
}

2021年408算法题(邻接表改编版)

定义


算法实现

2023年408算法题(邻接表改编版)

实现

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

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

相关文章

【Linux】指令详解(三)

目录 1. 前言2. 常见指令2.1 重定向2.1.1 >2.1.2 >>2.1.3 < 2.2 与文件有关指令2.2.1 more2.2.2 less &#xff08;推荐使用&#xff09;2.2.3 head2.2.4 tail2.2.5 wc2.2.6 | 2.3 find2.4 grep 3. 时间相关的指令3.1 data3.2 时间戳3.3 cal 4. zip/unzip 1. 前言 …

JVM——垃圾回收(方法区中的垃圾回收和(堆回收)自动垃圾回收)

目录 1.自动垃圾回收介绍1.C/C的内存管理2.Java的内存管理3.垃圾回收的对比 2.方法区的回收方法区的回收 – 手动触发回收 3.堆回收1.引用计数法2.可达性分析算法 1.自动垃圾回收介绍 1.C/C的内存管理 ⚫ 在C/C这类没有自动垃圾回收机制的语言中&#xff0c;一个对象如果不再…

2017年8月3日 Go生态洞察:贡献者峰会探秘

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

智能化学习打破资源障碍 成为英语学习新趋势

智能化学习是一种基于互联网和人工智能技术的学习行为,通过网络,学习者可以随时随地进行学习,真正打破了时间和空间的限制。与传统线下学习方式相比,智能化学习更加方便、资源更加丰富,使海量英语学习资源唾手可得,智能化学习正逐渐成为中国孩子习得英语的重要方式。 随着全球…

代码随想录算法训练营第四十五天|57. 爬楼梯、322.零钱兑换、279. 完全平方数

KamaCoder 57. 爬楼梯 题目链接&#xff1a;题目页面 (kamacoder.com) 这道题使用完全背包来实现&#xff0c;我们首先考虑的是总的楼梯数&#xff0c;因此dp数组大小为n 1 &#xff0c;其意义是&#xff0c;在n阶时有多少种方法爬到楼顶&#xff0c;因此&#xff0c;当前n状…

MVCC多版本并发控制相关面试题整理

多版本并发控制是一种用于支持并发事务的数据库管理系统技术&#xff0c;它允许多个事务同时访问数据库&#xff0c;而不会相互干扰或导致数据不一致。MVCC通过在数据库中维护不同版本的数据来实现这一目标&#xff0c;从而允许每个事务看到一致的数据库快照。 并发导致的问题…

基于51单片机的人体追踪可控的电风扇系统

**单片机设计介绍&#xff0c; 基于51单片机超声波测距汽车避障系统 文章目录 一 概要概述硬件组成工作原理优势应用场景总结 二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 # 基于51单片机的人体追踪可控的电风扇系统介绍 概述 该系统是基于51…

王者农药小游戏

游戏运行如下&#xff1a; sxt Background package sxt;import java.awt.*; //背景类 public class Background extends GameObject{public Background(GameFrame gameFrame) {super(gameFrame);}Image bg Toolkit.getDefaultToolkit().getImage("C:\\Users\\24465\\D…

【教学类-06-09】20231125 (55格版)X-Y之间“加法减法+-题” (以10-20之间为例)(加法的正序+逆序,减法的正序,题目多)

图片展示 需求&#xff1a; 20以内加法减法&#xff0c;不需要再练习其中10以内部分&#xff0c;改为10-20以内的加法减法&#xff0c;X-Y大于10&#xff0c;小于20的所有加法减法题。 代码展示&#xff1a; X-Y 之间的所有加减混合法题&#xff08;如10-20之间的所有加法减法…

Proteus仿真--基于DS1302与1602LCD设计的可调式电子日历与时钟

本文介绍基于51单片机的DS1302与1602LCD可调式电子日历与时钟&#xff08;完整仿真源文件及代码见文末链接&#xff09; 仿真图如下 本设计中时间芯片选用DS1302芯片&#xff0c;液晶选用LCD1602模块&#xff0c;按键K1-K4&#xff0c;K1用于年月日时分选择&#xff0c;K2用于…

前端入门(三)Vue生命周期、组件技术、脚手架、存储、事件总线、

文章目录 Vue生命周期Vue 组件化编程 - .vue文件非单文件组件组件的注意点组件嵌套Vue实例对象和VueComponent实例对象Js对象原型与原型链Vue与VueComponent的重要内置关系 应用单文件组件构建 Vue脚手架 - vue.cli项目文件结构组件相关高级属性引用名 - ref数据接入 - props混…

【数据结构实验】排序(三)快速排序算法的改进(三者取中法)

文章目录 1. 引言2. 快速排序算法2.1 传统快速排序2.2 三者取中法 3. 实验内容3.1 实验题目&#xff08;一&#xff09;输入要求&#xff08;二&#xff09;输出要求 3.2 算法实现 4. 实验结果 1. 引言 快速排序是一种经典的排序算法&#xff0c;其核心思想是通过选择一个基准元…

从0到0.01入门 Webpack| 003.精选 Webpack面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

c语言刷题12周(1~5)

输入年月日&#xff0c;显示这一天是这一年的第几天&#xff0c;保证输入日期合法。 题干输入年月日&#xff0c;显示这一天是这一年的第几天&#xff0c;保证输入日期合法。输入样例2022 1 1 2022 12 31 2024 12 31 2022 4 5输出样例2022-1 2022-365 2024-366 2022-9…

辅助驾驶功能开发-外部需求篇-导航式巡航辅助NCA外部依赖及需求

1.功能外部依赖 为了设计满足用户需求的 ICA/NCA 系统,需要用到的系统输入为:环境及驾驶员感知信息、 门锁监测信息、胎压监测信息、驾驶员权限管理、车辆模式管理信息、用户请求输入、转向系统 信息、惯性及导航定位信息、被动安全及约束信息、变速箱系统信息、制动系…

Redis大key与热Key

什么是 bigkey&#xff1f; 简单来说&#xff0c;如果一个 key 对应的 value 所占用的内存比较大&#xff0c;那这个 key 就可以看作是 bigkey。具体多大才算大呢&#xff1f;有一个不是特别精确的参考标准&#xff1a; bigkey 是怎么产生的&#xff1f;有什么危害&#xff1f;…

3.2 CPU的自动化

CPU的自动化 改造1-使用2进制导线改造2根据整体流程开始改造指令分析指令MOV_A的开关2进制表格手动时钟gif自动时钟gif 根据之前的CPU内部结构改造,制造一个cpu控制单元 改造一 之前的CPU全由手动开关自己控制,极度繁琐,而开关能跟二进制一一对应, 开:1, 关:0图1是之前的, …

2017年7月13日 Go生态洞察:向Go 2迈进

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

手撕AVL_二叉平衡树(图文并茂)

目录 前言 一 . AVL树的概念 二 . AVL树节点的定义 三 . AVL树的插入 1.插入节点 2.调节负载因子 四 . AVL树的旋转 1.左单旋 2.左右双旋 五 . AVL树性能分析 总结 前言 大家好,今天带大加手撕AVL树的插入 一 . AVL树的概念 二叉搜索树虽可以缩短查找的效率&#x…

process control 化学工程 需要用到MATLAB的Simulink功能

process control 化学工程 需要用到MATLAB的Simulink功能 所有问题需要的matlab simulink 模型 WeChat: ye1-6688 The riser tube brings in contact the recirculating catalyst with the feed oil, which then vaporizes and splits to lighter components as it flows up th…