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<algorithm>
using namespace std;
#define INF (1<<29)
#define N   (110)

int dj[N][N];
int n,m;

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]);
}
int main()
{
    while(~scanf("%d%d",&n,&m))
    {
        for(int i=0;i<N;++i)
            for(int j=0;j<N;++j)
            {
                if(i != j) dj[i][j] = INF;
                else dj[i][j] = 0;
            }
        for(int i=0;i<m;++i)
        {
            int a,b;
            scanf("%d%d",&a,&b);
            if(a != b) dj[a][b] = dj[b][a] = 1;
        }
        Floyd();
        bool flag = true;
        for(int i=0;i<n;++i)
            for(int j=0;j<n;++j)
                if(dj[i][j] > 7)
                {
                    flag =false;
                    break;
                }
        if(flag) printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}

时间: 2024-08-30 02:31:12

Floyd模板的相关文章

Floyd 模板 &amp; [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个数

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

最短路径 Floyd &amp;&amp; spfa

floyd算法是一个很强大的算法,它可以计算任意两点之间的最短路径,其边可以为负值.时间复杂度n^3 1 void floyd() 2 { 3 int k,u,v; 4 for(k=0;k<G.vunm;k++) 5 for(u=0;u<G.vunm;u++) 6 for(v=0;v<G.vunm;v++) 7 { 8 if(D[u][v]>D[u][k]+D[k][v]) 9 { 10 D[u][v]=D[u][k]+D[k][v]; 11 } 12 } 13 printf(&q

hiho一下 第二十四周---最短路径&#183;二:Floyd算法

最短路径·二:Floyd算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 万圣节的中午,小Hi和小Ho在吃过中饭之后,来到了一个新的鬼屋! 鬼屋中一共有N个地点,分别编号为1..N,这N个地点之间互相有一些道路连通,两个地点之间可能有多条道路连通,但是并不存在一条两端都是同一个地点的道路. 由于没有肚子的压迫,小Hi和小Ho决定好好的逛一逛这个鬼屋,逛着逛着,小Hi产生了这样的问题:鬼屋中任意两个地点之间的最短路径是多少呢? 提示:其实如果你开心的话,完全可以从

【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

dijistra和Folyd模板

dijistra模板 1 void dijistra(int x){ 2 int pos = x; 3 for(int i = 1; i <= n; i ++){ 4 dist[i] = g[i][pos]; 5 } 6 vis[pos] = true; 7 for(int i = 1; i <= n; i ++){ 8 int mins = INF; 9 for(int j = 1; j <= n; j ++){ 10 if(!vis[j] && dist[j] <

hdu 1596 find the safest road (Floyd)

Problem Description XX星球有很多城市,每个城市之间有一条或多条飞行通道,但是并不是所有的路都是很安全的,每一条路有一个安全系数s,s是在 0 和 1 间的实数(包括0,1),一条从u 到 v 的通道P 的安全度为Safe(P) = s(e1)*s(e2)…*s(ek) e1,e2,ek是P 上的边 ,现在8600 想出去旅游,面对这这么多的路,他想找一条最安全的路.但是8600 的数学不好,想请你帮忙 ^_^ Input 输入包括多个测试实例,每个实例包括:第一行:n.n表

【HDOJ1217】【Floyd求最长路】

http://acm.hdu.edu.cn/showproblem.php?pid=1217 Arbitrage Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 9455    Accepted Submission(s): 4359 Problem Description Arbitrage is the use of discrepa

Floyd判最小环算法模板

算法思想:如果存在最小环,会在编号最大的点u更新最短路径前找到这个环,发现的方法是,更新最短路径前,遍历i,j点对,一定会发现某对i到j的最短路径长度dis[i][j]+mp[j][u]+mp[u][i] != INF,这时i,j是图中挨着u的两个点,因为在之前最短路更新过程中,u没有参与更新,所以dis[i][j]所表示的路径中不会出现u,如果成立,则一定是一个环.用Floyd算法来实现.但是对于负环此算法失效,因为有负环时,dis[i][j]已经不能保证i到j的路径上不会经过同一个点多次了.