首页 > 其他分享 >[最短路] 学习笔记

[最短路] 学习笔记

时间:2023-08-08 23:11:26浏览次数:30  
标签:int 短路 cin 笔记 学习 add edge main top

建图

邻接矩阵

时间、空间:\(O(n^2)\)

int n, m, e[N][N];
int main()
{
	cin >> n >> m;
	for (int i = 1; i <= m; i ++)
	{
		int x, y, w;
		cin >> x >> y >> w;
		e[x][y] = w;
		e[y][x] = w;
	}
	for (int i = 1; i <= n; i ++)
	{
		for (int j = 1; j <= n; j ++) cout << e[x][y] << ' ';
		cout << '\n';
	}		
}

边集数组

时间:\(O(nm)\) ,空间:\(O(m)\)

struct edge
{
	int x, y, w;
}e[2*M];
int n, m;
int main()
{
	cin >> n >> m;
	for (int i = 1; i <= m; i ++)
	{
		int x, y, w;
		cin >> x >> y >> w;
		e[i] = {x, y, w};
		e[i+m] = {y, x, w};
	}
	for (int i = 1; i <= n; i ++)
		for (int j = 1; j <= m << 1; j ++)
			if (e[j].x == i)  
				printf("%d %d %d\n", i, e[j].y, e[j].w);
}

邻接表(vector)

时间、空间:\(O(n+m)\) (不开 \(O2\) 时要注意 vector 常数大)

struct edge
{
	int y, w;
};
vector<edge> e[N];
int n, m;
int main()
{
	cin >> n >> m;
	for (int i = 1; i <= m; i ++)
	{
		int x, y, w;
		cin >> x >> y >> w;
		e[x].push_back({y, w});
		e[y].push_back({x, w});
	}
	for (int i = 1; i <= n; i ++)
		for (int j = 0; j < e[i].size(); j ++)
			printf("%d %d %d\n", i, e[i][j].y, e[i][j].w);		
}

链式前向星

这个视频讲得很好

时间、空间:\(O(n+m)\)

struct edge
{
	int to, w, next;
}e[M];
int n, m, top, h[N];
void add(int x, int y, int w)
{
	e[++top] = {y, w, h[x]};
	h[x] = top;
}
int main()
{
	cin >> n >> m;
	for (int i = 1; i <= m; i ++)
	{
		int x, y, w;
		cin >> x >> y >> w;
		add(x, y, w);
		add(y, x, w);
	}
	for (int i = 1 i <= n; i ++) 
		for (int j = h[i]; ~j; j = e[j].next)
			printf("%d %d %d\n", i, e[j].to, e[j].w);
		
}

标签:int,短路,cin,笔记,学习,add,edge,main,top
From: https://www.cnblogs.com/hi-zwjoey/p/17613661.html

相关文章

  • Docker学习(三)-----Docker镜像和仓库了解以及加速
    镜像(Image)是构建容器的基础,镜像是一种分层结构的文件系统。我们可以从仓库(Repository)中下载镜像,而仓库又保存在Registry中,DockerHub是Docker官方提供的Registry。即可以从DockerHub的顶层仓库中免费获取官方提供的基于镜像,又可以将自已构建的镜像存放于DockerHub的用户仓库......
  • Docker学习(二)-----Docker安装和使用
    本章我们就来学习docker的安装和初步使用。LinuxCentOSDocker安装Docker支持以下的CentOS版本:CentOS7(64-bit)CentOS6.5(64-bit)或更高的版本前提条件目前,CentOS仅发行版本中的内核支持Docker。Docker运行在CentOS7上,要求系统为64位、系统内核版本为3.10以上......
  • Docker学习(一)-----Docker全面介绍
    Docker简介Docker是一种遵从Apache2.0协议开源的Linux容器管理解决方案,它通过进程和进程通信技术对操作系统的文件资源和网络的进行隔离,实现了包含文件资源、系统资源(shell环境等)以及网络资源的容器创建和管理。每一个容器都有一个唯一的进程,当该进程结束的时候,容器也会完全的停......
  • 算法学习笔记-exgcd
    前言:\(\operatorname{exgcd}\),顾名思义,是\(\gcd\)的一种扩展。\(\gcd\)是求最大公因数,所用到的是辗转相除法,基于\(\gcd(a,b)=\gcd(b,a\modb)(a>b)\)的原理,在学习\(\operatorname{exgcd}\)前,请确保已掌握\(\gcd\),并懂得一点数学归纳法。如果您已掌握这些前置知识,请开......
  • Head First 的学习之道
    《HeadFirst设计模式》是一本好书,正如书的封面上说的那样,这是一本重视大脑的学习指南。里面提到了一些学习方法,可以尝试下,看看哪些对你有用:1.慢一点,理解的越多,需要记得就越少不要走马观花地看。停下来,好好想一想。面对书中提出的问题,不要急着翻答案。大脑想得越深,就越有可能......
  • 《CUDA编程:基础与实践》读书笔记(1):CUDA编程基础
    1.GPU简介GPU与CPU的主要区别在于:CPU拥有少数几个快速的计算核心,而GPU拥有成百上千个不那么快速的计算核心。CPU中有更多的晶体管用于数据缓存和流程控制,而GPU中有更多的晶体管用于算数逻辑单元。所以,GPU依靠众多的计算核心来获得相对较高的并行计算性能。一块单独的GPU无......
  • Pandas学习挑战第三关-数据结构DataFrame
    Pandas数据结构-DataFrameDataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共同用一个索引)。DataFrame构造方法如下:pandas.DataFrame(data,index,column......
  • C++ Primer Plus 第6版 读书笔记(8)第 8章 函数探幽
    第8章函数探幽本章内容包括:内联函数。引用变量。如何按引用传递函数参数。默认参数。函数重载。函数模板。函数模板具体化。通过第7章,您了解到很多有关C++函数的知识,但需要学习的知识还很多。C++还提供许多新的函数特性,使之有别于C语言。新特性包括内联函数、......
  • Acwing 849. Dijkstra求最短路 I
    题目给定一个$n$个点$m$条边的有向图,图中可能存在重边和自环,所有边权均为正值。请你求出$1$号点到$n$号点的最短距离,如果无法从$1$号点走到$n$号点,则输出$−1$。输入格式第一行包含整数$n$和$m$。接下来$m$行每行包含三个整数$x,y,z$,表示存在一条从点$x$......
  • MarkDOWN学习
    MarkDOWN学习标题井号+空格+标题双井号+空格+二级标题最多支持六级标题字体加粗左右各两个*斜体左右各一个*倾斜加粗左右各三个划掉两边各两个~引用引用>+空格分割线三个_或者三个*截图感叹号+中括号+小括号,中括号内写标题,小括号内写链接,本地链接直接选图片,网......