From 245013263201e930df97e6ffed6066004c17bf64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Thu, 28 Dec 2023 16:07:26 +0800 Subject: [PATCH] 'commit' --- .../AcWing_TiGao/T3/MiniPathYingYong/1135.cpp | 26 ++++++------ .../T3/MiniPathYingYong/1135.eddx | Bin 0 -> 12913 bytes .../AcWing_TiGao/T3/MiniPathYingYong/1135.md | 38 +++++++++--------- 3 files changed, 33 insertions(+), 31 deletions(-) create mode 100644 TangDou/AcWing_TiGao/T3/MiniPathYingYong/1135.eddx diff --git a/TangDou/AcWing_TiGao/T3/MiniPathYingYong/1135.cpp b/TangDou/AcWing_TiGao/T3/MiniPathYingYong/1135.cpp index 841e270..df720b8 100644 --- a/TangDou/AcWing_TiGao/T3/MiniPathYingYong/1135.cpp +++ b/TangDou/AcWing_TiGao/T3/MiniPathYingYong/1135.cpp @@ -15,7 +15,7 @@ void add(int a, int b, int c) { e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++; } -int dist[6][N]; +int dis[6][N]; int id[6]; // 0号索引:佳佳的家,其它5个亲戚,分别下标为1~5,值为所在的车站编号 /* @@ -26,13 +26,13 @@ bool st[N]; /* S:出发车站编号 - dist[]:是全局变量dist[6][N]的某一个二维,其实是一个一维数组 + dis[]:是全局变量dis[6][N]的某一个二维,其实是一个一维数组 C++的特点:如果数组做参数传递的话,将直接修改原地址的数据 此数组传值方式可以让我们深入理解C++的二维数组本质:就是多个一维数组,给数组头就可以顺序找到其它相关数据 - 计算的结果:获取到S出发到其它各个站点的最短距离,记录到dist[S][站点号]中 + 计算的结果:获取到S出发到其它各个站点的最短距离,记录到dis[S][站点号]中 */ -void dijkstra(int S, int dist[]) { - dist[S] = 0; +void dijkstra(int S, int dis[]) { + dis[S] = 0; memset(st, false, sizeof st); priority_queue, greater> q; q.push({0, S}); @@ -45,9 +45,9 @@ void dijkstra(int S, int dist[]) { st[u] = true; for (int i = h[u]; ~i; i = ne[i]) { int v = e[i]; - if (dist[v] > dist[u] + w[i]) { - dist[v] = dist[u] + w[i]; - q.push({dist[v], v}); + if (dis[v] > dis[u] + w[i]) { + dis[v] = dis[u] + w[i]; + q.push({dis[v], v}); } } } @@ -66,10 +66,10 @@ void dfs(int u, int pre, int sum) { for (int i = 1; i <= 5; i++) // 在当前位置上,枚举每个可能出现在亲戚站点 if (!st[i]) { // 如果这个亲戚没走过 st[i] = true; // 走它 - // 本位置填充完,下一个位置,需要传递前序是i,走过的路径和是sum+dist[pre][id[i]].因为提前打好表了,所以肯定是最小值,直接用就行了  + // 本位置填充完,下一个位置,需要传递前序是i,走过的路径和是sum+dis[pre][id[i]].因为提前打好表了,所以肯定是最小值,直接用就行了  // 需要注意的是一维是 6的上限,也就是 佳佳家+五个亲戚 ,而不是 车站号(佳佳家+五个亲戚) !因为这样的话,数据就很大,数组开起来麻烦,可能会MLE // 要注意学习使用小的数据标号进行事情描述的思想 - dfs(u + 1, i, sum + dist[pre][id[i]]); + dfs(u + 1, i, sum + dis[pre][id[i]]); st[i] = false; // 回溯 } } @@ -91,10 +91,10 @@ int main() { // 计算从某个亲戚所在的车站出发,到达其它几个点的最短路径 // 因为这样会产生多组最短距离,需要一个二维的数组进行存储 - memset(dist, 0x3f, sizeof dist); - for (int i = 0; i < 6; i++) dijkstra(id[i], dist[i]); + memset(dis, 0x3f, sizeof dis); + for (int i = 0; i < 6; i++) dijkstra(id[i], dis[i]); // 枚举每个亲戚所在的车站站点,多次Dijkstra,分别计算出以id[i]这个车站出发,到达其它点的最短距离,相当于打表 - // 将结果距离保存到给定的二维数组dist的第二维中去,第一维是指从哪个车站点出发的意思 + // 将结果距离保存到给定的二维数组dis的第二维中去,第一维是指从哪个车站点出发的意思 // dfs还要用这个st数组做其它用途,所以,需要再次的清空 memset(st, 0, sizeof st); diff --git a/TangDou/AcWing_TiGao/T3/MiniPathYingYong/1135.eddx b/TangDou/AcWing_TiGao/T3/MiniPathYingYong/1135.eddx new file mode 100644 index 0000000000000000000000000000000000000000..1a75bb9b14bced54c8981d440d7d144b587b88d3 GIT binary patch literal 12913 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 literal 0 HcmV?d00001 diff --git a/TangDou/AcWing_TiGao/T3/MiniPathYingYong/1135.md b/TangDou/AcWing_TiGao/T3/MiniPathYingYong/1135.md index ddb4a8b..bb233b8 100644 --- a/TangDou/AcWing_TiGao/T3/MiniPathYingYong/1135.md +++ b/TangDou/AcWing_TiGao/T3/MiniPathYingYong/1135.md @@ -57,22 +57,24 @@ $id[1]=8$ 表示第$1$个亲戚家住在$8$号车站附近,记录每个亲戚与 #### 2、思考过程 -① 必须由佳佳的家出发,也就出发点肯定是$1$号车站 -② 现在想求佳佳去$5$个亲戚家,每一家都需要走到,不能漏掉任何一家,但顺序可以任意。这里要要用一个关系数组$id[]$来把亲戚家的编号与车站号挂接一下。 -③ 看到是最短路径问题,而且权值是正整数,考虑唯一可能性就是$Dijkstra$。 +① 必须由佳佳的家出发,也就是出发点肯定是$1$号车站 +② 现在想求佳佳去$5$个亲戚家,每一家都需要走到,不能漏掉任何一家,但顺序可以任意。这里要用一个关系数组$id[]$来把亲戚家的编号与车站号挂接一下。 +③ 看到是最短路径问题,而且权值是正整数,考虑$Dijkstra$。 ④ 但$Dijkstra$只能是单源最短路径求解,比如佳佳去二姨家,最短路径是多少。佳佳去三舅家,最短路径是多少。本题不是问某一家,问的是佳佳全去到,总的路径和最短是多少,这样的话,直接使用$Dijkstra$就无效了。 -⑤ 继续思考:因为亲戚家只有$5$个,可以从这里下手,通过全排列的办法,枚举出所有的可能顺序,此时,计算次数=$5*4*3*2*1=120$次。 就算是跑个$120$次的$Dijkstra$也不是啥大问题,就是常数大一点呗,可以试试。 +⑤ 继续思考:因为亲戚家只有$5$个,可以从这里下手,通过全排列的办法,枚举出所有的可能顺序,此时,计算次数=$5*4*3*2*1=120$次。 ⑥ 跑多次$Dijkstra$是在干什么呢?就是在分别以二姨,三舅,四大爷家为出发点,分别计算出到其它亲戚家的最短距离,如果我们把顺序分别枚举出来,每次查一下已经预处理出来的两个亲戚家的最短距离,再加在一起,不就是可以进行$PK$最小值了吗? 至此,整体思路完成。 +![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202312281603744.png) + #### 3.编码步骤 * **$6$次最短路** 分别以佳佳家、五个亲戚家为出发点($id[i]~ i\in[0,5]$),求$6$次最短路,相当于打表,一会要查 * **求全排列** - 因为佳佳所有的亲戚都要拜访到,现在不知道的是什么样顺序拜访才是时间最少的。 把所有可能顺序都 **枚举** 出来,通过查表,找出两个亲戚家之间的最小时间,累加结果的和,再$PJ$最小就是答案 + 因为佳佳所有的亲戚都要拜访到,现在不知道的是什么样顺序拜访才是时间最少的。 把所有可能顺序都 **枚举** 出来,通过查表,找出两个亲戚家之间的最小时间,累加结果的和,再$PK$最小就是答案 #### 4.实现细节 通过前面的$6$次打表预处理,可以求出$6$个$dist$数组,当我们需要查找 $1->5$的最短路径时,直接查$dist[1][5]$ @@ -102,7 +104,7 @@ void add(int a, int b, int c) { e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++; } -int dist[6][N]; +int dis[6][N]; int id[6]; // 0号索引:佳佳的家,其它5个亲戚,分别下标为1~5,值为所在的车站编号 /* @@ -113,13 +115,13 @@ bool st[N]; /* S:出发车站编号 - dist[]:是全局变量dist[6][N]的某一个二维,其实是一个一维数组 + dis[]:是全局变量dis[6][N]的某一个二维,其实是一个一维数组 C++的特点:如果数组做参数传递的话,将直接修改原地址的数据 此数组传值方式可以让我们深入理解C++的二维数组本质:就是多个一维数组,给数组头就可以顺序找到其它相关数据 - 计算的结果:获取到S出发到其它各个站点的最短距离,记录到dist[S][站点号]中 + 计算的结果:获取到S出发到其它各个站点的最短距离,记录到dis[S][站点号]中 */ -void dijkstra(int S, int dist[]) { - dist[S] = 0; +void dijkstra(int S, int dis[]) { + dis[S] = 0; memset(st, false, sizeof st); priority_queue, greater> q; q.push({0, S}); @@ -132,9 +134,9 @@ void dijkstra(int S, int dist[]) { st[u] = true; for (int i = h[u]; ~i; i = ne[i]) { int v = e[i]; - if (dist[v] > dist[u] + w[i]) { - dist[v] = dist[u] + w[i]; - q.push({dist[v], v}); + if (dis[v] > dis[u] + w[i]) { + dis[v] = dis[u] + w[i]; + q.push({dis[v], v}); } } } @@ -153,10 +155,10 @@ void dfs(int u, int pre, int sum) { for (int i = 1; i <= 5; i++) // 在当前位置上,枚举每个可能出现在亲戚站点 if (!st[i]) { // 如果这个亲戚没走过 st[i] = true; // 走它 - // 本位置填充完,下一个位置,需要传递前序是i,走过的路径和是sum+dist[pre][id[i]].因为提前打好表了,所以肯定是最小值,直接用就行了  + // 本位置填充完,下一个位置,需要传递前序是i,走过的路径和是sum+dis[pre][id[i]].因为提前打好表了,所以肯定是最小值,直接用就行了  // 需要注意的是一维是 6的上限,也就是 佳佳家+五个亲戚 ,而不是 车站号(佳佳家+五个亲戚) !因为这样的话,数据就很大,数组开起来麻烦,可能会MLE // 要注意学习使用小的数据标号进行事情描述的思想 - dfs(u + 1, i, sum + dist[pre][id[i]]); + dfs(u + 1, i, sum + dis[pre][id[i]]); st[i] = false; // 回溯 } } @@ -178,10 +180,10 @@ int main() { // 计算从某个亲戚所在的车站出发,到达其它几个点的最短路径 // 因为这样会产生多组最短距离,需要一个二维的数组进行存储 - memset(dist, 0x3f, sizeof dist); - for (int i = 0; i < 6; i++) dijkstra(id[i], dist[i]); + memset(dis, 0x3f, sizeof dis); + for (int i = 0; i < 6; i++) dijkstra(id[i], dis[i]); // 枚举每个亲戚所在的车站站点,多次Dijkstra,分别计算出以id[i]这个车站出发,到达其它点的最短距离,相当于打表 - // 将结果距离保存到给定的二维数组dist的第二维中去,第一维是指从哪个车站点出发的意思 + // 将结果距离保存到给定的二维数组dis的第二维中去,第一维是指从哪个车站点出发的意思 // dfs还要用这个st数组做其它用途,所以,需要再次的清空 memset(st, 0, sizeof st);