【C++算法模板】图的存储-邻接矩阵

news2024/12/23 11:08:45

文章目录

    • 邻接矩阵
    • 洛谷3643 图的存储

邻接矩阵

  • 邻接矩阵相比于上一篇博客邻接表的讲解要简单得多
  1. 数据结构,如果将二维数组 g g g 定义为全局变量,那默认初始化应该为 0 0 0 ,如果题目中存在自环,可以做特判, m e m s e t memset memset 初始化数组 g g g 0 x 3 f 3 f 3 f 3 f 0x3f3f3f3f 0x3f3f3f3f 表示无穷大, 0 0 0 表示自环
// 邻接矩阵
int d[N]; // 存储每个顶点的度
int g[N][N]; // 邻接矩阵
  1. 以下模板是无向图的邻接矩阵模板,如果改成有向图,和邻接表一样,不需要对称建边,比如有一条边是 ( 1 , 3 ) (1,3) (1,3),则 $d[1]++,\ g[1][3]=1 $ 即可
// 输入边
while(m--) {
    int u,v;
    scanf("%d%d",&u,&v);
    // 邻接矩阵建边
    d[u]++,d[v]++; // 顶点u和顶点v度数+1
    g[u][v]=1,g[v][u]=1; // 互相可达,为0表示不可达(如果题目涉及自环可用memset初始化为0x3f3f3f3f表示不可达)
}
  • 完整代码如下,注意代码采用无向图模板
#include<bits/stdc++.h>
#define x first
#define y second

using namespace std;

typedef long long ll;
typedef pair<int,int> PII;

// 解题思路: 图的存储-邻接矩阵

const int N=1e3+5;
const int M=(1e5+5)*2; // 无向图建边最大边数为题目最大边数*2

// 邻接矩阵
int d[N]; // 存储每个顶点的度
int g[N][N]; // 邻接矩阵

int main() {
	// 假设题目编号默认从1开始
	int n,m; // 存储顶点数和边数
	// 输入边
	while(m--) {
		int u,v;
		scanf("%d%d",&u,&v);
		// 邻接矩阵建边
		d[u]++,d[v]++; // 顶点u和顶点v度数+1
		g[u][v]=1,g[v][u]=1; // 互相可达,为0表示不可达(如果题目涉及自环可用memset初始化为0x3f3f3f3f表示不可达)
	}
	// 输出邻接矩阵
	for(int i=1;i<=n;i++) {
		for(int j=1;j<=n;j++) {
			cout<<g[i][j]<<' ';
		}
		cout<<endl;
	}
	return 0;
}
  • 关于邻接表和链式前向星的讲解在我的博客:【C++模板】图的存储-邻接表,手撕链式前向星,超详细代码注释

洛谷3643 图的存储

题目链接:B3643 图的存储 - 洛谷

在这里插入图片描述

#include<bits/stdc++.h>
#define x first
#define y second

using namespace std;

typedef long long ll;
typedef pair<int,int> PII;

// 解题思路: 

const int N=1e3+10; // 最大顶点
const int M=(1e5+10)*2; // 最大边数

int n,m; // 顶点数和边数
int u,v;

// 邻接矩阵
int d[N]; // 存度数
int g[N][N]; // 邻接矩阵

// 邻接表
int h[N]; // h[i]:编号i的顶点的
int ne[M];
int e[M];
int idx; // 建树因子

// 链式前向星(头插法)
void add(int a,int b) {
	e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}

int main() {
	cin>>n>>m;
	memset(h,-1,sizeof h); // 初始化
	while(m--) {
		scanf("%d%d",&u,&v);
		// 邻接矩阵建边
		d[u]++,d[v]++; // 度数+1
		g[u][v]=1,g[v][u]=1; // 互达
		// 邻接表建边
		add(u,v);
		add(v,u);
	}
	// 遍历邻接矩阵
	for(int i=1;i<=n;i++) {
		for(int j=1;j<=n;j++) {
			cout<<g[i][j]<<' ';
		}
		cout<<endl;
	}
	// 遍历邻接表
	for(int i=1;i<=n;i++) {
		cout<<d[i]<<' '; // 先输出点i的度数
		vector<int> s;
		for(int j=h[i];j!=-1;j=ne[j]) {
			int t=e[j];
			s.push_back(t);
		}
		// 编号从小到大排序
		sort(s.begin(),s.end());
		for(auto t:s) cout<<t<<' ';
		cout<<endl;
	}
	return 0;
}

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

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

相关文章

300分钟吃透分布式缓存-28讲:如何构建一个高性能、易扩展的Redis集群?

Redis 集群的分布式方案主要有 3 种。分别是 Client 端分区方案&#xff0c;Proxy 分区方案&#xff0c;以及原生的 Redis Cluster 分区方案。 Client 端分区 Client 端分区方案就是由 Client 决定数据被存储到哪个 Redis 分片&#xff0c;或者由哪个 Redis 分片来获取数据。…

深度解析Kafka分区策略的精妙之处

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 深度解析Kafka分区策略的精妙之处 前言分区的基本概念1. Kafka 分区的定义&#xff1a;2. Kafka 分区的基本原理&#xff1a;3. 为何分区是 Kafka 消息传递的关键组成部分&#xff1a; 分区策略的选择…

数字化浪潮下的选择:ETU-LINK光模块写码板全新升级至400G

随着光模块市场的蓬勃发展&#xff0c;ETU研发团队致力于不断改进SFP编码工具&#xff0c;以满足日益增长的客户需求。经过不懈努力&#xff0c;我们成功推出了3.0版本的写码板&#xff0c;在硬件和软件方面都进行了全面升级&#xff0c;为用户带来了极大的便利。今天&#xff…

每日汇评:如果支撑位守住2145美元,黄金可能反弹至纪录高位

金价在周二因美国CPI数据火爆而暴跌后保持稳定&#xff1b; 美元和美债收益率在美元/日元下跌中暂停反弹&#xff1b; 随着美国CPI的出炉&#xff0c;市场焦点转向周四的零售销售和PPI数据&#xff1b; 金价在2160美元附近盘整&#xff0c;周二从2195美元的纪录高位回调约1%。由…

windows批处理脚本(cmd指令)

一、简介 最早期的电脑系统是DOS系统&#xff0c;DOS系统只有一个黑漆漆的窗口&#xff0c;需要自己输入命令&#xff0c;所以学习命令是很有必要的&#xff0c;那么CMD命令大全是什么?直到今天的Windows系统&#xff0c;还是离不开DOS命令的操作。如今懂得使用windows批处理脚…

C++ 作业 24/3/12

1、自己封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height),定义公有成员函数: 初始化函数:void init(int w, int h)更改宽度的函数:set_w(int w)更改高度的函数:set_h(int h) 输出该矩形的周长和面积函数:void show() #include <iostream>using …

TS271IDT运算放大器芯片中文资料PDF数据手册引脚图图片参数价格功能

产品描述&#xff1a; TS271 是一款低成本、低功耗的单通道运算放大器&#xff0c;设计用于采用单电源或双电源供电。该运算放大器采用意法半导体硅栅CMOS工艺&#xff0c;具有出色的消耗-速度比。该放大器非常适合低功耗应用。 电源可通过引脚 8 和 4 之间连接的电阻器进行外…

Kotlin 空类型,区间,数组

目录 1. 空类型 2. 区间 3. 数组 1. 空类型 我们知道任何一种数据类型都有为空或不为空两种状态&#xff0c;在 Kotlin 中&#xff0c;若允许一个数据为空&#xff0c;则需要使用 "?"&#xff0c;默认都不能为空。 代码举例说明 // 给 notNull赋值为空&#x…

硬件软件_驱动程序只有cat,inf,sys,怎么安装?

硬件软件_驱动程序只有cat&#xff0c;inf&#xff0c;sys&#xff0c;怎么安装&#xff1f; 右键点击inf文件 -》 安装 即可完成。

centos命令history设置记录10000行

今天在操作服务器的时候&#xff0c;用history查看操作记录的时候&#xff0c;发现只能查看10条&#xff0c;这样不行啊&#xff0c;我想查看所有人对服务器操作的命令。 [rootbogon ~]# history解决办法&#xff1a; #1、找到/etc/profile文件中的histsize 把10改成10000 […

pycharm 历史版本下载地址

pycharm 历史版本下载地址 老版本能用就行&#xff0c;不需要搞最新的&#xff0c;当然了&#xff0c;有些小伙伴就是喜欢新的&#xff08;最先吃螃蟹&#xff09; 博主就不搞最新了&#xff0c;哈哈 上菜&#xff1a; https://www.jetbrains.com/pycharm/download/other.html…

操作系统—自定义系统调用

文章目录 自定义系统调用1.实验基本环境(1).基本系统环境(2).选择替换WSL内核的起因(3).我尝试的改进措施 2.添加系统调用(1).系统调用位置(2).系统调用函数编写(3).添加系统调用号(4).添加编译参数并编译#1.一次极其失败的尝试#2.推倒重来 (5).尝试调用sys_mysyscall 3.后记参…

[译]Python 和 TOML:新最好的朋友 (2) 使用Python操作TOML

文章目录 Python 和 TOML&#xff1a;新最好的朋友使用Python加载TOML使用tomli 或 tomllib 读取TOML文档比较TOML类型和Python类型在项目中使用配置文件 将Python对象转换为TOML将字典转换为 TOML通过tomli_w 写TOML文档 创建新的TOML文件格式和样式用tomlkit 从头开始创建 TO…

创建springboot 2.x web空项目(IDEA)

由于学习时候发现spring官网只能创建springboot3.0的项目&#xff0c;而且不支持java1.8&#xff0c;无法选择java8作为java版本&#xff0c;导致很多教程无法跟着做&#xff0c;因此记录一下可行的创建过程。 &#xff08;Tips:当前spring Initializr不支持java8的解决方式&a…

在win11关闭copilot

在设置中的个性化设置&#xff0c;任务栏处关闭即可。 参考资料 How to disable Copilot in Windows 11

6种最佳的UI设计工具!

最好的UI设计工具可以适应几乎每一个设计过程&#xff0c;并有望满足您的创意需求。UI设计工具为设计师提供了高保真线框图、物理模型和原型所需的精确设计&#xff0c;并提供了最小限度的可行性产品。它们代表设计细节&#xff0c;传达设计功能。用户体验设计工具关注用户&…

C++作业day2

封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height)&#xff0c; 定义公有成员函数: 初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w) 更改高度的函数:set_h(int h) 输出该矩形的周长和面积函数:void show() #include <iostre…

BM1684X搭建sophon c++环境

1:首先安装编译好sophon-sail 比特大陆BM1684X开发环境搭建--SOC mode-CSDN博客 2:在将之前配置的soc-sdk拷贝一份到sdk根目录&#xff0c;将交叉编译好的sail中的build_soc拷贝至soc-sdk文件夹内&#xff1b; cp -rf build_soc/sophon-sail/inlcude soc-sdk cp -rf build_soc…

测试用例实战(全网最详细-注册,登录,发布文章)

1.注册测试用例实战 需求图片如下&#xff1a; 注册测试点&#xff08;用等价类和边界值&#xff09; 重点提示&#xff1a; 正向&#xff1a;⼀次尽量覆盖多条 逆向&#xff1a;⼀次只能覆盖⼀条&#xff0c;其他选项必须正确。 注册测试用例 注意&#xff1a;注册的测试点…

Linux:深入文件系统

一、Inode 我们使用ls -l的时候看到的除了看到文件名&#xff0c;还看到了文件元数据。 [rootlocalhost linux]# ls -l 总用量 12 -rwxr-xr-x. 1 root root 7438 "9月 13 14:56" a.out -rw-r--r--. 1 root root 654 "9月 13 14:56" test.c 每行包含7列&…