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

图的邻接矩阵

数据结构定义

#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算法题(邻接表改编版)

实现

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【极客技术】真假GPT-4?微调 Llama 2 以替代 GPT-3.5/4 已然可行!

近日小编在使用最新版GPT-4-Turbo模型&#xff08;主要特点是支持128k输入和知识库截止日期是2023年4月&#xff09;时&#xff0c;发现不同商家提供的模型回复出现不一致的情况&#xff0c;尤其是模型均承认自己知识库达到2023年4月&#xff0c;但当我们细问时&#xff0c;Fak…

【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. 前言 …

【LeetCode】挑战100天 Day16(热题+面试经典150题)

【LeetCode】挑战100天 Day16&#xff08;热题面试经典150题&#xff09; 一、LeetCode介绍二、LeetCode 热题 HOT 100-182.1 题目2.2 题解 三、面试经典 150 题-183.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站&#xff0c;提供各种算法和数据结构的题目&…

【测试开发工程师】TestNG测试框架零基础入门(上)

哈喽大家好&#xff0c;我是小浪。那么今天是一期基于JavaTestNG测试框架的入门教学的博客&#xff0c;从只会手工测试提升到自动化测试&#xff0c;这将对你的测试技术提升是非常大的&#xff0c;有助于我们以后在找工作、面试的时候具备更大的竞争力~ 文章目录 一、什么是T…

笔记:pycharm当有多个plt.show()时候,只显示第一个plt.show()

import matplotlib.pyplot as plt import numpy as np# 创建数据 x np.linspace(0, 10, 100) y1 np.sin(x) y2 np.cos(x) y3 np.tan(x) y4 np.exp(x)# 创建一个2x2的子图网格 # fig plt.figure() fig,((ax1, ax2), (ax3, ax4)) plt.subplots(nrows2, ncols2, figsize(8,…

在mathtype输入花体,如L,I, K等

在mathtype输入“\mathcal{L}"就OK了 \mathcal{K} \mathcal{I}

当你准备开始学习 Java 时,确保已完成以下准备工作,安装Java开发环境并验证通过。

当你准备开始学习 Java 时&#xff0c;确保已完成以下准备工作&#xff1a; a. 安装Java开发环境 下载Java Development Kit (JDK)&#xff1a; 访问Oracle官方网站&#xff0c;选择适用于你操作系统的JDK版本&#xff0c;点击下载。 安装JDK&#xff1a; 下载完成后&#xf…

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

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

【键盘变成了快捷键,怎么办?】

**最便捷的操作&#xff1a;**拔掉键盘有线插头&#xff0c;将键盘驱动进行卸载&#xff0c;重新插上键盘即可 键盘驱动如何卸载: 以win10为例&#xff0c;点击开始菜单栏选择设置 选择左上角系统 选择系统中&#xff0c;点击最下方关于&#xff0c;点击右侧的设备管理器 选…

java容器

cow容器 copy on write 又被成为写时复制(读写分离)容器, 原理就是: 如果向一个数组中添加元素的时候,会将原来的数组复制一份为新的数组,原来的数组不会动,负责读处理,然后在新的数组中进行添加操作,添加完后,将新数组的地址,赋值给原来数组的地址 这种设计的好处是什么呢?…

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

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

Edit And Resend测试接口工具(浏览器上的Postman)

优点 可以不用设置Cookie或者Token&#xff0c;只设置参数进行重发接口测试API 使用Microsoft Rdge浏览器 F12——然后点击网络——在页面点击发起请求——然后选择要重发的请求右键选择Edit And Resend——在网络控制台设置自己要设置的参数去测试自己写的功能

互联网上门洗鞋店小程序

上门洗鞋店小程序门店版是基于原平台版进行增强的&#xff0c;结合洗鞋行业的线下实际运营经验和需求&#xff0c;专为洗鞋人和洗鞋店打造的高效、实用、有价值的管理软件系统。 它能够帮助洗鞋人建立自己的私域流量&#xff0c;实现会员用户管理&#xff0c;实现用户与商家的点…

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…

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

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

【STM32】GPIO输出

1 GPIO简介 &#xff08;1&#xff09;GPIO&#xff08;General Purpose Input Output&#xff09;通用输入输出口 &#xff08;2&#xff09;可配置为8种输入输出模式 &#xff08;3&#xff09;引脚电平&#xff1a;0V~3.3V&#xff0c;部分引脚可容忍5V&#xff08;可以输…

Spring Web MVC

目录 一.简介 二.建立连接&#xff08;客户端和服务器&#xff09; 三.请求 1.传递单个参数 2.传递多个参数 3.对象 4.数组/集合 5.JSON 6.URL参数 7.上传文件 8.获取cookie和session &#xff08;1&#xff09;获取cookie &#xff08;2&#xff09;获取session …

6、独立按键控制LED亮灭

独立按键 轻触按键&#xff1a;相当于是一种电子开关&#xff0c;按下时开关接通&#xff0c;松开是开关断开 实现原理&#xff1a;是通过轻触按键内部的金属弹片受力弹动来实现接通和断开 代码&#xff1a; #include <REGX52.H>void main() {//等同于P20XFE;P2_00…

3.1 CPU内部结构与时钟与指令

CPU内部结构 总线一些自定义部件总线图内存指令执行流程:取指令,译码,执行pc做的事内存地址寄存器内存缓存寄存器指令寄存器,译码第一步指令寄存器传递地址到内存地址寄存器指令MOV_A的过程(译码第二步)第一条指令执行完毕第三条指令的执行第四条指令第四条指令不同的执行流程…

【matlab程序】图像最大化填充画布

【matlab程序】图像最大化填充画布 不做任何修饰&#xff1a; 修饰&#xff1a; 图片 往期推荐 图片 【python海洋专题一】查看数据nc文件的属性并输出属性到txt文件 【python海洋专题二】读取水深nc文件并水深地形图 【python海洋专题三】图像修饰之画布和坐标轴 【Pytho…