
图论
AAS48
一起学算法
展开
-
Leetcode 1584. 连接所有点的最小费用(手撸普利姆算法)
连接点 [xi, yi] 和点 [xj, yj] 的费用为它们之间的 曼哈顿距离 :|xi - xj| + |yi - yj| ,其中 |val| 表示 val 的绝对值。给你一个points 数组,表示 2D 平面上的一些点,其中 points[i] = [xi, yi]。可以把set想象成一个大岛屿,每次都是找其他节点到这个大岛屿的最短距离,找到后把该节点并入这个大岛屿。请你返回将所有点连接的最小总费用。输入:points = [[0,0],[2,2],[3,10],[5,2],[7,0]]原创 2022-09-05 12:13:01 · 336 阅读 · 0 评论 -
Leetcode 684. 冗余连接(并查集模板)
给定往一棵 n 个节点 (节点值 1~n) 的树中添加一条边后的图。添加的边的两个顶点包含在 1 到 n 中间,且这条附加的边不属于树中已存在的边。图的信息记录于长度为 n 的二维数组 edges ,edges[i] = [ai, bi] 表示图中在 ai 和 bi 之间存在一条边。请找出一条可以删去的边,删除后可使得剩余部分是一个有着 n 个节点的树。如果有多个答案,则返回数组 edges 中最后出现的边。如果缺少某一条边的情况下,仍能让所有节点都处于一个集合内,那么就说明这条边是冗余的。...原创 2022-08-31 15:51:03 · 230 阅读 · 0 评论 -
数据结构之拓扑排序、关键路径
本文内容包括:拓扑排序、关键路径一、拓扑排序在讲到拓扑排序之前,我们得先了解一下有向无环图、AOV网和AOE网这三个东西有向无环图(DAG):中间的就是有向无环图,自己对比一下AOV网和AOE网:AOV网用于拓扑排序,AOE网用于关键路径。引例1:排课表问题。我们需要确定哪一门课先修,哪一门课得在前一门课的基础上修引例2:如何判断一个有向图是否有环?拓扑排序出场对下面这个图进行拓扑排序,得到的序列用来设置课程表,就是合理的拓扑排序思想核心:每次找出入度为0的节点,将其加原创 2020-10-29 16:56:43 · 797 阅读 · 0 评论 -
C语言实现邻接表
试题 与1连通的点的个数输入格式 输入的第一行包含两个整数n, m n代表图中的点的个数,m代表边的个数 接下来m行,每行2个正整数,表示图中连通的两点。输出格式 输出1个数,与1连通的点的个数。样例输入6 31 22 33 4样例输出4【思路】:由于数据量大,不适合用邻接矩阵存储,用邻接表实现为宜/**6 41 33 43 55 6**/#include<stdio.h>#include<stdlib.h>#define原创 2020-10-09 20:53:21 · 740 阅读 · 0 评论 -
最小生成树算法:普利姆、克鲁斯卡尔(附详细代码)
【注:】本文代码在c++环境下运行普利姆算法和克鲁斯卡尔算法,都可以用于最小生成树的寻找。初学两种算法,很容易混淆,经常会把普利姆的算法过程记到了克鲁斯卡尔的头上。这是因为这两个算法都是以人名命名,难以记忆。所以,我建议,根据两算法的特点,把克鲁斯卡尔算法记作 “加边算法” 。把普利姆算法记作 “加点算法”。我们今天的算法分析,就以下面这个无向带权图为例子:其邻接矩阵我们可以画出,如下图...原创 2020-04-25 14:03:27 · 1639 阅读 · 0 评论 -
天梯赛习题:7-14 排座位 (并查集)
7-14 排座位 (25 分)布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席。输入格式:输入第一行给出3个正整数:N(≤100),即前来参宴的宾客总人数,则这些人从1到N编号;M为已知两两宾客之间的关系数;K为查询的条数。随后M行,每行给出一对宾客之间的关...原创 2019-03-13 17:37:41 · 534 阅读 · 0 评论 -
蓝桥杯:历届试题 发现环(并查集 + DFS)
问题描述 小明的实验室有N台电脑,编号1~N。原本这N台电脑之间有N-1条数据链接相连,恰好构成一个树形网络。在树形网络上,任意两台电脑之间有唯一的路径相连。 不过在最近一次维护网络时,管理员误操作使得某两台电脑之间增加了一条数据链接,于是网络中出现了环路。环路上的电脑由于两两之间不再是只有一条路径,使得这些电脑上的数据传输出现了BUG。为了恢复正常传输。小明需要找到所有在环路上的电脑...原创 2019-03-12 13:24:40 · 1443 阅读 · 0 评论 -
LeetCode: 547. 朋友圈(并查集)
班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知第 i 个和 j 个学生互为朋友关系,否则为不知道。你必须输出所有学生中的已知的朋友圈总数。示例 ...原创 2019-03-12 11:01:55 · 370 阅读 · 0 评论 -
蓝桥杯:历届试题 合根植物(并查集 + 索引思想)
题目:https://blog.youkuaiyun.com/weixin_40163242/article/details/88397162还是刚刚那道题,这次用并查集做就成功AC了。其实用并查集做完才发现,其实比广搜做还要简单啊!这题简直就是裸的并查集了,然后这题还有一个索引的思想注意一下。在最后我将所有的boss结点的tag值置为1,然后我再遍历一遍tag数组,看哪些值为1,哪些就是boss结点了...原创 2019-03-11 17:51:12 · 283 阅读 · 0 评论 -
图论知识:并查集(基本写法,无压缩)
既然研究到了最小生成树,那就必须得谈一谈克鲁斯卡尔算法了。既然谈到了克鲁斯卡尔算法,那就必须先把并查集弄清楚!推荐博客:https://blog.youkuaiyun.com/w1085541827/article/details/52076481现在先给出这样一个图,然后给定两个结点,然你判断它们是否在同一个子网中。比如图中,4、5结点是在一个子网中的。我们就利用这一道题来实现一下并查集。并查集...原创 2019-03-10 16:48:29 · 265 阅读 · 0 评论 -
天梯赛习题:L2-025 分而治之(无向图相邻结点的分析)
L2-025 分而治之 (25 分)分而治之,各个击破是兵家常用的策略之一。在战争中,我们希望首先攻下敌方的部分城市,使其剩余的城市变成孤立无援,然后再分头各个击破。为此参谋部提供了若干打击方案。本题就请你编写程序,判断每个方案的可行性。输入格式:输入在第一行给出两个正整数 N 和 M(均不超过10 000),分别为敌方城市个数(于是默认城市从 1 到 N 编号)和连接两城市的通路条数。随后...原创 2019-03-14 19:31:12 · 431 阅读 · 0 评论 -
最小生成树:普利姆算法(与Dijkstra算法有很强的联系)
最近在研究图论方面的知识,这方面的代码和知识如果弄熟了之后,写程序的能力可以大大提高。因为这里面不仅包含着大量算法,还有很复杂但有用的数据结构这是我弄清楚普利姆算法的博客,推荐:https://blog.youkuaiyun.com/syyyy712/article/details/79180455#commentBox图很清楚,代码写得也很好。关于普利姆算法,我想总结的是:它和迪杰斯特拉求最短路径的算...原创 2019-03-10 14:03:13 · 1874 阅读 · 0 评论 -
天梯赛习题:L3-008 喊山(DFS + 图论数据结构)
L3-008 喊山 (30 分)喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤。呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的。原来它是彝族先民用来求援呼救的“讯号”,慢慢地人们在生活实践中发现了它的实用价值,便把它作为一种交流工具世代传袭使用。一个山头呼喊的声音可以被临近的山头同时听到。题目假设每个山头最多...原创 2019-03-09 14:21:20 · 712 阅读 · 3 评论 -
天梯赛习题:直捣黄龙(Dijsk算法 + dfs + 路径状态存储)
L3-011 直捣黄龙 (30 分)本题是一部战争大片 —— 你需要从己方大本营出发,一路攻城略地杀到敌方大本营。首先时间就是生命,所以你必须选择合适的路径,以最快的速度占领敌方大本营。当这样的路径不唯一时,要求选择可以沿途解放最多城镇的路径。若这样的路径也不唯一,则选择可以有效杀伤最多敌军的路径。输入格式:输入第一行给出 2 个正整数 N(2 ≤ N ≤ 200,城镇总数)和 K(城镇间道...原创 2019-03-09 12:33:49 · 2110 阅读 · 0 评论 -
最短路径:迪杰斯特拉算法
#include&lt;iostream&gt;using namespace std;const int inf = 0x3f3f3f3f;int main(){ int n, m; //n为顶点个数,m为边的条数 int e[10][10], dis[10]; //存储图 cin &gt;&gt; n &gt;&gt; m; //初始化 for(int i = 1...原创 2019-03-09 10:11:17 · 291 阅读 · 0 评论 -
天梯赛习题:紧急救援(DFS + 最短路 + 图数据结构)
L2-001 紧急救援 (25 分)作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队。输入格式:输入第一行给出4个正整数N、M、S、D,其中N(2≤N≤...原创 2019-03-08 18:58:14 · 796 阅读 · 0 评论