首页 > 其他分享 >代码随想录day50 || 图论基础

代码随想录day50 || 图论基础

时间:2024-09-04 13:03:15浏览次数:8  
标签:图论 int graph 随想录 len res day50 path 节点

图论

基础定义

image

图的构造方式

1,邻接矩阵

image

矩阵位置array[i][j] = k, i表示节点i,j表示节点j,[i][j] 表示i-->j存在一条边,k表示的是边的权重

邻接矩阵的优点:
表达方式简单,易于理解
检查任意两个顶点间是否存在边的操作非常快
适合稠密图,在边数接近顶点数平方的图中,邻接矩阵是一种空间效率较高的表示方法。

缺点:
遇到稀疏图,会导致申请过大的二维数组造成空间浪费 且遍历 边 的时候需要遍历整个n * n矩阵,造成时间浪费

2,邻接表

image

邻接表的数组存放的所有节点,每个位置对应的链表保存了该节点的所有度,eg: 1-->3-->5 代表节点1分别指向了节点3 和 节点5

邻接表的优点:
对于稀疏图的存储,只需要存储边,空间利用率高
遍历节点连接情况相对容易

缺点:
检查任意两个节点间是否存在边,效率相对低,需要 O(V)时间,V表示某节点连接其他节点的数量。
实现相对复杂,不易理解

797 图所有路径

var path []int
var res [][]int

func allPathsSourceTarget(graph [][]int) [][]int {
	// 本体是一个有向图,参数已经给出了邻接表的结构
	// 本题是搜索路径,先考虑dfs,深度优先,原理是先一条路走到头,然后回溯,走下一条路
	path = []int{0}
	res = [][]int{}
	dfs(graph, graph[0], len(graph)-1)
	return res
}

func dfs(graph [][]int, route []int, target int) {  // 回溯参数返回值
	// 回溯终止条件 + 收集结果
	if path[len(path) - 1] == target{
		var copypath = make([]int, len(path))
		copy(copypath, path)
		res = append(res, copypath)
		return
	}
	if len(route) == 0{
		return
	}

	// for{单次回溯逻辑}
	for i:=0; i<len(route); i++ {
		path = append(path, route[i])
		dfs(graph, graph[route[i]], target)
		path = path[ : len(path) - 1]
	}
	return
}

标签:图论,int,graph,随想录,len,res,day50,path,节点
From: https://www.cnblogs.com/zhougongjin55/p/18396243

相关文章

  • 代码随想录 刷题记录-26 图论 (3)最小生成树
    一、prim算法精讲53.寻宝解题思路最小生成树是所有节点的最小连通子图,即:以最小的成本(边的权值)将图中所有节点链接到一起。图中有n个节点,那么一定可以用n-1条边将所有节点连接到一起。那么如何选择这n-1条边就是最小生成树算法的任务所在。例如本题示例中的无......
  • 代码随想录算法day7 - 字符串1
    题目1344.反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解决这一问题。示例1:输入:s=["h","e","l","l","o"]输出:["o","l","l","e",&qu......
  • 代码随想录算法训练营|Day06 LeetCode 242.有效的字母异位词,349.两个数组的交集,202.快
    理论知识哈希表是根据关键码的值而直接进行访问的数据结构,一般用来快速判断一个元素是否出现在集合里映射——哈希函数哈希碰撞线性探测法拉链法常用的哈希结构数组set(集合)map(映射)242.有效的字母异位词242.有效的字母异位词-力扣(LeetCode)classSolution{......
  • 代码随想录day16--图论
    题目描述:给定一个由1(陆地)和0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。输入描述:第一行包含两个整数N,M,表示矩阵的行数和列数。后续N行,每行包含M个数字,数字为1或者0。输出描......
  • 代码随想录算法训练营,9月3日 | 454.四数相加II,383. 赎金信,15. 三数之和,18. 四数之和
    454.四数相加II题目链接:454.四数相加II文档讲解︰代码随想录(programmercarl.com)视频讲解︰四数相加II日期:2024-09-03想法:4个数组,两两分开遍历时间复杂度低点,用一个map,key是i+j的值,value是出现次数,对nums3、4只需要判断0-k-l在不在map里,最后依次加上出现次数就行了。Java代......
  • 代码随想录算法训练营第32天|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
    目录509.斐波那契数1、题目描述2、思路3、code4、复杂度分析70.爬楼梯1、题目描述2、思路3、code746.使用最小花费爬楼梯1、题目描述2、思路3、code4、复杂度分析509.斐波那契数题目链接:link1、题目描述斐波那契数(通常用F(n)表示)形成的序列称为斐波那......
  • Day50.列表标签
    1.列表标签_无序列表,ul的实心圆圈和ul的空心圆圈2.列表标签_无序列表,ul的无样式和ul的实心方块3.列表标签_有序列表,type的默认格式、A格式、罗马数字、指定默认格式的起始位置4.列表标签_标题列表 ......
  • Day50.a与img标签
    1.img标签中:src和alt用法2.img标签中:title用法3.img标签中:height和width调整图片大小的用法4.a标签中:href和target新页面打开用法5.1.a标签的锚点功能_拉到页面最下面的`回到中间`5.2.a标签的锚点功能_点击`回到中间`可以看到页面向上跳转6.1.标签具有的两个重要书写_......
  • 代码随想录训练营完结总结
    在参加代码随想录的很久之前,我就听闻了卡哥的大名,也在B站上看到了相关的视频,但由于自制力一直不行,所有总是坚持不下去,当时好像就只看到了数组,甚至于链表都没开始看,就已经放弃了。想着这个暑假不能荒废了,就狠下心报名了训练营。并在这个暑假完成了代码随想录的一刷,自我感觉对于算法......
  • 代码随想录day49 || 42、接雨水 84、柱状图中最大的矩形
    42、接雨水functrap(height[]int)int{ //双指针思路,按照列计算雨水高度,分别计算每一列左右高于当前高度的最高柱子高度,然后通过min(left,right)-height[i]得出当前列的雨水体积 varresint varleft,rightint fori:=1;i<len(height)-1;i++{ left,right=......