【邻接矩阵】 & 【AT-ABC343-B】

文章目录

邻接矩阵

邻接矩阵只适用于没有重边(或重边可以忽略)的情况

最显著的优点是可以 O ( 1 ) O(1) O(1) 查询一条边是否存在

由于邻接矩阵在稀疏图上效率很低(尤其是在点数较多的图上,空间无法承受),所以一般只会在稠密图上使用邻接矩阵

PS:一般在 n ≤ 1000 n\leq1000 n≤1000时使用邻接矩阵,其他可使用详见我的另一篇博文:链式前向星

邻接矩阵的时间复杂度

查询是否存在某条边: O ( 1 ) O(1) O(1)

遍历一个点的所有出边: O ( n ) O(n) O(n)

遍历整张图: O ( n 2 ) O(n^2) O(n2)

空间复杂度: O ( n 2 ) O(n^2) O(n2)

邻接矩阵的存储方式

有向图 :将a[i][j]赋值为1,代表第i个点j个点之间有一条边

无向图 :将a[i][j]赋值为1,将a[j][i]赋值为1,代表第i个点j个点之间有一条边

邻接矩阵详细解析

假定样例:

cpp 复制代码
6
1 2
3 4
2 4
1 5
1 4
3 3

领接矩阵code↓

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e4+50;
int n;
int a[maxn][maxn];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		int x,y;
		cin>>x>>y;
		a[x][y]=1;
//		a[y][x]=1;//如果是无向图则启用
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cout<<a[i][j]<<" ";
		}
		cout<<endl;
	}
	return 0;
}

如果是有向图,则输出如下图

如果是无向图,则输出如下图

可以看出,他是沿对角线(蓝色这条线,如果在线上的则不变)对称

Atcoder例题【ABC343-B】

题目链接:Atcoder例题【ABC343-B】

题目以及题意解析

题意:给出一个矩阵,按升序打印与顶点i直接相连的顶点的个数

题目解析:只需要将这个矩阵当成邻接矩阵进行输入,然后依次 O ( n ) O(n) O(n)遍历即可

code↓

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e4+50;//边界
int n;//n*n的矩阵
int a[maxn][maxn];//定数组的边界,边界为maxn
int main(){
	cin>>n;//输入的是一个n*n的矩阵
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>a[i][j];//输入邻接矩阵,如果a[i][j]=1,那么代表i与j直接有边连接
			a[j][i]=a[i][j];//因为是无向图,而他们是对称的,所以需要倒过来再赋值一遍
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(a[i][j]==1) cout<<j<<" ";//如果他们直接相连,则输出直接相连的这一个点的编号
		}
		cout<<endl;//输出格式
	}
	return 0;
}

此做法已AC

完结撒花QWQ

相关推荐
Dontla27 分钟前
Rust泛型系统类型推导原理(Rust类型推导、泛型类型推导、泛型推导)为什么在某些情况必须手动添加泛型特征约束?(泛型trait约束)
开发语言·算法·rust
Ttang2333 分钟前
Leetcode:118. 杨辉三角——Java数学法求解
算法·leetcode
喜欢打篮球的普通人34 分钟前
rust模式和匹配
java·算法·rust
java小吕布1 小时前
Java中的排序算法:探索与比较
java·后端·算法·排序算法
tumu_C1 小时前
C++模板特化实战:在使用开源库boost::geometry::index::rtree时,用特化来让其支持自己的数据类型
c++·开源
杜若南星1 小时前
保研考研机试攻略(满分篇):第二章——满分之路上(1)
数据结构·c++·经验分享·笔记·考研·算法·贪心算法
路遇晚风1 小时前
力扣=Mysql-3322- 英超积分榜排名 III(中等)
mysql·算法·leetcode·职场和发展
Neophyte06081 小时前
C++算法练习-day40——617.合并二叉树
开发语言·c++·算法
木向1 小时前
leetcode104:二叉树的最大深度
算法·leetcode