最短路
River_____________
这个作者很懒,什么都没留下…
展开
-
Bellman-ford 算法
struct edge { int from; int to; int cost ; }; edge es[max_e];//边 int d[maxn];//最短距离 int v,e;//顶点个数和边数 void shortest_path(int s) { for(int i=0;i<v;i++) d[i]=INF; d[s]=0; w原创 2017-03-20 21:37:58 · 261 阅读 · 0 评论 -
dijkstra的两种实现方式
1。 O(V^2) int cost [maxn_v][maxn_v] int d[max_v]; bool used[max_v] int v; void dijkstra(int s) { fill(d,d+v,INF); fill(used,used+v,false); d[s]=0; } while(true) { int v=-1; fo原创 2017-03-23 15:56:40 · 356 阅读 · 0 评论 -
POJ3255(次短路大法好,dij大法好)
Bessie has moved to a small farm and sometimes enjoys returning to visit one of her best friends. She does not want to get to her old home too quickly, because she likes the scenery along the way. She原创 2017-03-27 11:53:27 · 380 阅读 · 0 评论 -
Six Degrees of Cowvin Bacon POJ - 2139(floyd)
The cows have been making movies lately, so they are ready to play a variant of the famous game "Six Degrees of Kevin Bacon". The game works like this: each cow is considered to be zero degrees o原创 2017-03-15 23:33:14 · 236 阅读 · 0 评论 -
Silver Cow Party POJ - 3268 (dijkstra变形)
开始用的folyd显然1000的三次方超时了。 那么只有使用dijkstra来优化,但是题目中要求的是到达vis并且返回原来的位置,所以这里可以使用一个二维的数组来代表所有顶点到其他点的最小距离。 本题将dijkstra的使用范围和floyd一样,但是复杂度是o(e*logv),比floyd更快 // 求解从顶点s出发到所有点的最短距离 void dijkstra(int s) {原创 2017-03-24 15:56:17 · 229 阅读 · 0 评论 -
uva10048 ( floyd,最大值最小化)
心痛,紫书上的这个和ccf一样的,但我没做。。。先去哭一回。。。 紫书上是这样给出证明的:任意的从i到j的路,如果至少由两条边组成,那么在联通的两条边中直接取最大值;如果从i到j的路是不联通的,那么一定在d[i][j]=min(d[i][j],max(d[i][k],d[k][j])); 中的三个数中至少有两个是INF 那么最终由最大值是否为INF 就可以得出是否是no path原创 2017-03-23 22:31:48 · 253 阅读 · 0 评论 -
uva247电话圈(floyd求闭包,建图)
题目大体意思是给出一些有向路径,求这些路径能组成多少回路,求这些路径能组成多少环,并输出每个环。 dfs的输出思想要学习一下 void dfs(int s) { vis[s]=1; for(int i=0; i<n; i++) { if(d[s][i]&&d[i][s]) { if(!vis[i])原创 2017-03-23 21:21:49 · 269 阅读 · 0 评论 -
ZOJ1221(uva567)
两个题的数据是一样的,但是UVA的输出格式更严格一些在输出时要加上%2d 才能过,PE了好几次。。。 uva 567的代码 : #include #include #include #define INF 1000000 using namespace std; const int maxn=100; int d[maxn][maxn]; int n,k; void Init() {原创 2017-03-23 18:49:13 · 305 阅读 · 0 评论 -
学习贝尔曼算法(poj2240,1860,3259)
利用这三个题目学习理解了一下bellman——ford 算法 poj2240:给出不同货币之间的汇率,求是否可以通过货币的多次兑换使得最终得到的货币比开始时多。其实就是求是否存在无限增大的环。 #include #include #include #include using namespace std; const int maxn=10000; int V,E; int n,m原创 2017-03-23 15:16:46 · 408 阅读 · 0 评论 -
Dijkstra 堆优化 JAVA版本
模板基于 P3371 【模板】单源最短路径 ArrayList模拟的vector第一维开足10000会T,所以只有70分 import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.PriorityQueue; import java.util.Queue; imp...原创 2019-03-09 22:22:07 · 2621 阅读 · 0 评论