蓝桥杯备考---图的应用

存储结构1---邻接矩阵

int start, end, weight;//数组初始化为0或特别大的数
	while(num --){
		cin >> start >> end >> weight;
		map[start][end] = weight;//记录从起点start到终点end的权重weight 
	} 

空间复杂度O(n^2)        得到图中所有边的信息的时间复杂度为O(n^2)        效率太低

存储结构2---邻接表

#include<iostream>
#include<vector>
using namespace std;
const int N = 1e4;
typedef struct edge{
	int end, weight;//存储终点和权重	
}eg; 
int map[N][N];//邻接矩阵 
vector<eg> p[N];//邻接表 下标为起点 结构体存储终点和权重 本质上来说还是个二维矩阵 
//p[i]为一维数组 i 存储起点 依次将该点的各个终点和权重放入容器中  
int main(){
	int n, m;//节点个数,边的个数 
	cin >> n >> m;
	
	int start, end, weight;
	for(int i = 1; i <= m; i ++){//存入每条边的信息 建立邻接表 
		cin >> start >> end >> weight;
		p[start].push_back({end, weight});
	}
	
	for(int i = 1; i <= n; i ++)//邻接表转化为邻接矩阵  i的下标注意灵活变通 可能会从0开始 
		for(int j = 0; j < p[i].size(); j ++)
			map[i][p[i][j].end] = p[i][j].weight;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值