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

文章目录

    • 邻接矩阵
    • 洛谷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度数+1g[u][v]=1,g[v][u]=1; // 互相可达,为0表示不可达(如果题目涉及自环可用memset初始化为0x3f3f3f3f表示不可达)
}
  • 完整代码如下,注意代码采用无向图模板
#include<bits/stdc++.h>
#define x first
#define y secondusing 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度数+1g[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 secondusing 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]++; // 度数+1g[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.mzph.cn/news/740529.shtml

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

相关文章

因为manifest.json文件引起的 android-chrome-192x192.png 404 (Not Found)

H5项目打包之后&#xff0c;总是有这个报错&#xff0c;有时候还有别的icon也找不见 一通调查之后&#xff0c;发现是因为引入了一个vue插件 这个插件引入之后&#xff0c;webpack打包的时候就会自动在dist文件夹中产生一个manifest.json文件这个文件里面主要就是一些icon地址的…

制作图片马:二次渲染(upload-labs第17关)

代码分析 $im imagecreatefromjpeg($target_path);在本关的代码中这个imagecreatefromjpeg();函数起到了将上传的图片打乱并重新组合。这就意味着在制作图片马的时候要将木马插入到图片没有被改变的部分。 gif gif图的特点是无损&#xff0c;我们可以对比上传前后图片的内容…

1792. 最大平均通过率

文章目录 题意思路代码 题意 题目链接 给了每个班的人数和通过人数&#xff0c;给了一堆必考过的学生,分配给了不同班&#xff0c;让平均班的通过率最高。 思路 看分配给不同班的收益率&#xff0c;优先最高收益率&#xff0c;使用优先队列 代码 class Solution { public:…

linux内建命令/内部命令之exec

1.exec介绍 exec是linux shell内建命令&#xff0c;该命令将使用一个特定的命令来取代当前进程。一般当shell遇到一个命令&#xff0c;它会forks off一个子进程来真正的运行命令&#xff0c;但使用exec内建命令&#xff0c;shell就不会fork一个子进程了&#xff0c;并且命令的…

【问题解决】VMWare虚拟机主IP地址:网络信息不可用

在今天想用man命令查看相关函数的帮助时&#xff0c;突然发现自己的XShell连接不上虚拟机&#xff0c;通过在终端使用ifconfig命令也只查看得到本地回环&#xff0c;虽然最近常遇到这个问题&#xff0c;但一般通过重启虚拟机就能得以解决。 不过这次重启也不奏效了&#xff0c…

Java输出流之BufferWriter类

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

Android 12.0 系统内存优化之修改dalvik虚拟机的内存参数

1.前言 在12.0的系统rom开发定制中,app应用也是运行在dalvik虚拟机上的,所以对于一些内存低的系统中,在某些大应用会出现耗内存 卡顿情况,这是系统分配的内存不够大,在进行耗内存的操作,就会出现频繁gc等等原因造成不流畅的现象,接下来就分析下 虚拟机分配内存的相关原理…

爬虫入门到精通_框架篇14(PySpider架构概述及用法详解)

官方文档 Sample Code&#xff1a; from pyspider.libs.base_handler import *class Handler(BaseHandler):crawl_config {}# minutes24 * 60&#xff1a;每隔一天重新爬取every(minutes24 * 60)def on_start(self):self.crawl(http://scrapy.org/, callbackself.index_page)…

【C语言】Leetcode 66. 加一

文章目录 题目思路代码呈现 题目 链接: link 思路 题目的意思是把一个数以数组的形式输入&#xff0c;然后在这个书的末尾加一&#xff0c;应该是要考察&#xff0c;如果数加一后位数发生变化&#xff0c;比如9991成1000&#xff0c;3位数变成4位数怎么处理的。 并且我们可以…

uniapp 微信小程序和h5处理文件(pdf)下载+保存到本地+预览功能

uniapp实现微信小程序下载资源功能和h5有很大的不同&#xff0c;后台需返回blob文件流 1.微信小程序实现下载资源功能 步骤1&#xff1a;下载文件 uni.downloadFile({url:url,//调接口返回urlsuccess:(res)>{uni.hideLoading();if(res.statusCode200){var tempFilePath …

python调用clickhouse

&#xff08;作者&#xff1a;陈玓玏&#xff09; 使用clickhouse-driver包&#xff0c;先通过pip install clickhouse-driver安装包&#xff0c;再通过以下代码执行sql。 from clickhouse_driver import Client client Client(host10.43.234.214, port9000, userclickhou…

curl c++ 实现HTTP GET和POST请求

环境配置 curl //DV2020T环境下此步骤可省略 https://curl.se/download/ 笔者安装为7.85.0版本 ./configure --without-ssl make sudo make install sudo rm /usr/local/lib/curl 系统也有curl库&#xff0c;为防止冲突&#xff0c;删去编译好的curl库。 对以json数据的解析使…

主流开发语言和开发环境、程序员如何选择职业赛道?

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

C++开发基础——IO操作与文件流

一&#xff0c;基础概念 C的IO操作是基于字节流&#xff0c;并且IO操作与设备无关&#xff0c;同一种IO操作可以在不同类型的设备上使用。 C的流是指流入/流出程序的字节序列&#xff0c;在输入操作中数据从外部设备(键盘&#xff0c;文件&#xff0c;网络等)流入程序&#x…

apisix lua插件使用redis

引入 local redis require("resty.redis") local red redis:new() local redis_config { host "redis_v1", port "6379", pass "123456", db "0" } local function conn_redis() local ok, err red:connect(re…

安卓Java面试题 81- 90

81. 简述Android数字签名?Android系统要求所有的应用必须被证书进行数字签名之后才能进行安装。Android系统通过该证书来确认应用的作者,该证书是不需要权威机构认证的,一般情况下应用都是用开发者的自签名证书,该证书是确保应用程序和应用程序作者之间建立信任关系,而不是…

12 list的使用

文档介绍 文档介绍 1.list是可以在常数范围内的任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代 2.list的底层是带头双向链表循环结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向其前一个元素和…

大话设计模式 :UML类图 原版部分

目录 原书部分总结各符号继承关系实现接口关联关系聚合关系组合关系依赖关系 原书部分 总结 各符号 ‘’ 表示public ‘-’ 表示private ‘#’表示protected 棒棒糖表示法 类内实现的接口 用棒棒糖的形状在外部具体实现 继承关系 实现接口 关联关系 聚合关系 组合关系 依赖…

Redis核心数据结构之压缩列表(二)

压缩列表 压缩列表节点的构成 encoding 节点的encoding属性记录了节点的content属性所保存数据的类型及长度: 1.一字节、两字节或者五字节长&#xff0c;值得最高位为00、01或者10的是字节数组编码:这种编码表示节点的content属性保存着字节数组&#xff0c;数组的长度由编…

SwiftUI中的Sheet推出新页面

SwiftUI中的Sheet推出新页面 记录一下SwiftUI如何从下往上推出新的页面 import SwiftUIstruct SheetBootCamp: View {State var showSheet falsevar body: some View {ZStack{Color.green.ignoresSafeArea()Button(action: {showSheet.toggle()}, label: {/*START_MENU_TOKEN…