邻接矩阵

一、介绍

  • 什么是邻接矩阵呢?所谓邻接矩阵存储结构就每个顶点用一个一维数组存储边的信息,这样所有点合起来就是用矩阵表示图中各顶点之间的邻接关系。所谓矩阵其实就是二维数组。

  • 对于有 n个顶点的图 G=(V,E) 来说,我们可以用一个 n×n 的矩阵 A来表示 G 中各顶点的相邻关系,如果 vi和 vj​ 之间存在边(或弧),则 A[i][j]=1,否则 A[i][j]=0=0。下图为有向图 G 对应的邻接矩阵:
    邻接矩阵_第1张图片---- 在这里插入图片描述

二、不带权图

4 5
1 2
1 3
1 4
2 4
4 3

有向图:

#include 
const int N = 1005;
int g[N][N];
int main() {
	int n, m; //n个点 m条边 
	scanf("%d%d", &n, &m);
	int u, v; //表示2个点u--->v 
	for (int i = 0; i < m; i++) {
		scanf("%d%d", &u, &v);
		g[u][v] = 1;//有向图 u-->v 
	} 
	//输出
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			printf("%d", g[i][j]);
		}
		printf("\n");
	} 
	return 0;
} 

无向图:

#include 
const int N = 1005;
int g[N][N];
int main() {
	int n, m; //n个点 m条边 
	scanf("%d%d", &n, &m);
	int u, v; //表示2个点u--->v 
	for (int i = 0; i < m; i++) {
		scanf("%d%d", &u, &v);
		//无向图 
		g[u][v] = 1; 
		g[v][u] = 1; 
	} 
	//输出
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			printf("%d", g[i][j]);
		}
		printf("\n");
	} 
	return 0;
} 

三、带权图

邻接矩阵_第2张图片

#include 
const int N = 1005;
int g[N][N];
int main() {
	int n, m; //n个点 m条边 
	scanf("%d%d", &n, &m);
	int u, v, w; //表示2个点u--->v   w代表权值 
	for (int i = 0; i < m; i++) {
		scanf("%d%d%d", &u, &v, &w);
		//有向图 
		g[u][v] = w; 
	} 
	//输出
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			printf("%d ", g[i][j]);
		}
		printf("\n");
	} 
	return 0;
} 

你可能感兴趣的:(算法基础)