Floyd 模板 & [FZYZOJ 1318] 最短路

就当做一个Floyd的模板来练练手吧

P1318 -- [NOIP福建夏令营]最短路

时间限制:1000MS

内存限制:131072KB

Description

给出N个点,M条无向边的简单图,问所有点对之间的最短路。

Input Format

第1行两个正整数N,M(N<=100,M<=5000) 下面M行,每行3个正整数x, y, w,为一条连接顶点x与y的边权值为w。(x<=n,y<=n,w<=1000)

Output Format

包括N行,每行N个数,第i行第j个数为点i到点j的最短路,第i行第i个数应为0,数字之间空格隔开。

Sample Input

5 10
3 2 1
2 4 7
5 3 4
4 1 2
5 1 8
3 4 10
5 4 9
2 5 2
1 2 1
3 1 10

Sample Output

0 1 2 2 3
1 0 1 3 2
2 1 0 4 3
2 3 4 0 5
3 2 3 5 0

【题解】

#include<bits/stdc++.h>
using namespace std;
int n,m,dis[101][101];
int main() {
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;++i) for (int j=1;j<=n;++j) dis[i][j]=2100000;
    for (int i=1;i<=m;++i) {
        int a,b,w; scanf("%d%d%d",&a,&b,&w);
        dis[a][b]=dis[b][a]=w;
    }
    for(int i=1;i<=n;++i) dis[i][i]=0;
    for (int k=1;k<=n;++k)
        for (int i=1;i<=n;++i)
            for (int j=1;j<=n;++j)
                if(dis[i][k]+dis[k][j]<dis[i][j]) dis[i][j]=dis[i][k]+dis[k][j];
    for (int i=1;i<=n;++i) {
        for (int j=1;j<=n;++j) printf("%d ",dis[i][j]);
        printf("\n");
    }
    return 0;
}

Floyd的裸题,来练练手

时间: 2024-08-17 10:49:07

Floyd 模板 & [FZYZOJ 1318] 最短路的相关文章

POJ2263&amp;ZOJ1952--Heavy Cargo【Floyd】多源最短路变形

链接:http://poj.org/problem?id=2263 题意:有n个点,m条路,每条路双向的,现在卡车从某点到另一点,卡车的承载无上限,但是马路的承载有上限,问卡车应该承载多少才不会压坏马路. poj2253和它类似,链接:http://poj.org/problem?id=2253 解题报告:Here 就是在两点之间找一条路径,使路径中权值最小的那条边的权值最大,edge数组记录当前路径中最小权值边的权值 #include<cstring> #include<string&

FLOyd算法 求任意最短路

此算法由Robert W. Floyd(罗伯特·弗洛伊德)于1962年发表在"Communications of the ACM"上.同年Stephen Warshall(史蒂芬·沃舍尔)也独立发表了这个算法.Robert W.Floyd这个牛人是朵奇葩,他原本在芝加哥大学读的文学,但是因为当时美国经济不太景气,找工作比较困难,无奈之下到西屋电气公司当了一名计算机操作员,在IBM650机房值夜班,并由此开始了他的计算机生涯. 作者:ahalei来源:51CTO博客|2014-03-26

六度分离(floyd算法,SPFA算法,最短路—Dijkstra算法)

Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submission(s) : 36   Accepted Submission(s) : 16 Problem Description 1967年,美国著名的社会学家斯坦利·米尔格兰姆提出了一个名为"小世界现象(small world phenomenon)"的著名假说.大意是说.不论什么2个素不相识的人中间最多

Floyd模板

比较简单的算法:但是当点太多需要剪枝,不然很耗时 void Floyd() { for(int k=0;k<n;++k) for(int i=0;i<n;++i) for(int j=0;j<n;++j) dj[i][j] = min(dj[i][j],dj[i][k]+dj[k][j]); } hdu1869 #include<iostream> #include<cstdio> #include<cstring> #include<algor

【模板】Johnson最短路_luoguP5905

算法作用 用来解决带负权的有向图的最短路问题. 只要跑一次spfa,就可以随便跑Dij了. 算法思想 给每条边重新安排一个边权,使得不再存在负权边,并且可以由新图的最短路结果快速推出原图的最短路结果. 不连通的对每个连通块可以分别求.所以我们只要考虑联通的情况下怎么做. 那么,我们可以回想一下k短路,在哪个里面我们有最短路树.而且图中非树边我们给他们赋予了一个新的权值,意义是如果加上这条边,最短路会变大多少.我们发现,这个值一定是正的. 然后,就很好玩了.你会发现这个东西,很裂项.因为他的表达式

poj 1125 谣言传播 Floyd 模板题

假如有3个点 点1到点2要5分钟 点1到点3要3分钟 那么5分钟的时间可以传遍全图 所以要先找一个点到其他点的最长时间 再从最长的时间里找出最小值 Sample Input 3 // 结点数2 2 4 3 5 //点1与另外2个点相连 1->2 权值为4 1->3 权值为52 1 2 3 6 //点2与...2 1 2 2 2//点3...53 4 4 2 8 5 31 5 84 1 6 4 10 2 7 5 202 2 5 1 50Sample Output 3 23 10 1 # incl

【模板】SPFA最短路

#include<bits/stdc++.h> #define maxn 10005 using namespace std; int n,m,s; vector<int> v[maxn],w[maxn]; int dis[maxn]; bool vis[maxn]; void SPFA() { memset(dis,0x3f3f3f3f,sizeof(dis)); queue<int> q; dis[s]=0; vis[s]=1; q.push(s); while(!

【floyd】CODEVS 1077 多源最短路

floyd模板 1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 int a[101][101],m,x,y,n; 5 int main() 6 { 7 scanf("%d",&n); 8 for(int i=1;i<=n;i++) 9 for(int j=1;j<=n;j++) 10 scanf("%d",&a[i][j]); 11

dijkstra,SPFA,Floyd求最短路

Dijkstra: 裸的算法,O(n^2),使用邻接矩阵: 算法思想: 定义两个集合,一开始集合1只有一个源点,集合2有剩下的点. STEP1:在集合2中找一个到源点距离最近的顶点k:min{d[k]} STEP2:把顶点k加入集合1中,同时修改集合2中的剩余顶点j的d[j]是否经过k之后变短,若变短则修改d[j]; if d[k]+a[k,j]<d[j] then   d[j]=d[k]+a[k,j]; STEP3:重复STEP1,直到集合2为空为止. #include <iostream&