kuangbin专题四、最短路练习

题意:给你t条路径之间的关系,问你从n点走到1的最短路是多少,Dijkstra写一遍就行

Dijkstra理解:从起点s开始找到与之相连最短的点s‘,标记s‘,再更新s到与s‘相连的点s‘‘的最短距离,再从s‘‘中找到到s的最短的一个,标记,再更新s到与s‘‘相连的点的最短距离,循环往复,总之:就是不断标记最短点,再从该点出发,继续寻找。直到标记所有的点,更新完所有dis[i]。

话很绕,不如看图:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5
 6 const int maxn=100005;
 7 int mp[1005][1005];
 8 int dis[1005];
 9 int vis[1005];
10 int t,n;
11
12 void Dijkstra(int s)
13 {
14     memset(vis,0,sizeof(vis));
15     for(int i=1;i<=n;i++)
16         dis[i]=mp[1][i];  //dis[i]表示1到i的最短路
17     vis[s]=1;
18     int k;
19     for(int i=1;i<=n;i++) //迭代n次
20     {
21         int minn=maxn;
22         for(int j=1;j<=n;j++)
23             if(!vis[j] && dis[j]<minn)  //找到之前标记过,与之相连的所有点中的最短路点
24             {
25                 minn=dis[j];
26                 k=j;
27             }
28         vis[k]=1;
29         for(int j=1;j<=n;j++)
30             if(!vis[j] && dis[j]>mp[k][j]+dis[k]) //检查s是直接到j最短,还是经过k再到j最短
31                 dis[j]=mp[k][j]+dis[k];
32     }
33     return;
34 }
35 int main()
36 {
37     while(cin>>t>>n)
38     {
39         for(int i=1;i<=n;i++)
40             for(int j=1;j<=n;j++)
41                 mp[i][j]=maxn;
42         while(t--)
43         {
44             int a,b,c;
45             cin>>a>>b>>c;
46             if(mp[a][b]>c)
47                 mp[a][b]=mp[b][a]=c;
48         }
49         Dijkstra(1);
50         cout<<dis[n]<<endl;
51     }
52     return 0;
53 }

时间: 2024-12-25 20:36:27

kuangbin专题四、最短路练习的相关文章

kuangbin专题四 最短路练习【从入门到熟练】

[POJ 2253 Frogger] 这道题求从u到v中所有通路的最大边最小 我直接二分做了,但实际上这种题是最短路算法的变种,意义在于告诉我们spfa这些算法不仅能维护出最短路,稍加修改后可以维护出很多其他东西. #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<queue> #include<string> #include

kuangbin专题四 : 最短路 I 题 Arbitrage

kuangbin专题四 : 最短路 I 题  Arbitrage POJ 2240 Arbitrage is the use of discrepancies in currency exchange rates to transform one unit of a currency into more than one unit of the same currency. For example, suppose that 1 US Dollar buys 0.5 British pound,

【算法系列学习】Dijkstra单源最短路 [kuangbin带你飞]专题四 最短路练习 A - Til the Cows Come Home

https://vjudge.net/contest/66569#problem/A http://blog.csdn.net/wangjian8006/article/details/7871889 邻接矩阵实现的单源最短路 1 #include<iostream> 2 #include<cstdio> 3 #include<string> 4 #include<cstring> 5 #include<algorithm> 6 #include

[ An Ac a Day ^_^ ][kuangbin带你飞]专题四 最短路练习 POJ 2240 Arbitrage spfa求负环

题意就是问倒腾外币能不能升值 不用spfa 用其他的最短路算法也可以 松弛条件换成dist[v]<dist[u]*e[u][i].value 当然 貌似只有spfa有这个坑…… 有A  (value>1.0) A 这种情况……我的天 用Dij Floyd都只用判断如果松弛到了自己 那么一定有环 直接跳出就行 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<

[kuangbin带你飞]专题四 最短路练习

A. POJ 2387  Til the Cows Come Home 模板题. #include<iostream> #include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #include<vector> #include<string> #include<map> #include<queue> #in

[ An Ac a Day ^_^ ] [kuangbin带你飞]专题四 最短路练习 POJ 2387 Til the Cows Come Home

求1到N的最短路 注意有重边 跑一遍dijkstra就行 1 /* *********************************************** 2 Author :SunYuefeng 3 Created Time :2016/10/22 14:18:06 4 File Name :A.cpp 5 ************************************************ */ 6 7 #include<cstdio> 8 #include<io

[kuangbin带你飞]专题四 最短路练习 POJ 2253 Frogger

求第一个点到第二个点的所有通路上最长的边 dijkstra的变形 每次松弛的是每条边通路上的的最长的边 WA了好几次是因为用了%lf 改成%f就过了…… 1 /* *********************************************** 2 Author :SunYuefeng 3 Created Time :2016/10/22 14:18:06 4 File Name :A.cpp 5 ******************************************

[kuangbin带你飞]专题四 最短路练习 E - Currency Exchange

E - Currency Exchang 题目链接:https://vjudge.net/contest/66569#problem/E 题目: Several currency exchange points are working in our city. Let us suppose that each point specializes in two particular currencies and performs exchange operations only with thes

[kuangbin带你飞]专题四 最短路练习 F - Wormholes (判断负环)

F - Wormholes 题目链接:https://vjudge.net/contest/66569#problem/F 题目: While exploring his many farms, Farmer John has discovered a number of amazing wormholes. A wormhole is very peculiar because it is a one-way path that delivers you to its destination