多源无负环-Floyd算法 2019-11-10

1.可以带负权但是不能有负环

2.时间复杂度是O( n^3)比Dijkstra的O( n^2 )要慢

3.由于要用临接矩阵,和本身算法的复杂度,不能计算过于大量的数据1000以下应该还能过

例题:http://acm.hdu.edu.cn/showproblem.php?pid=1869

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=101;
const int inf=0x3f3f3f;
int e[N][N];
int main()
{
    int i,n,q,m,a,b,l;
    while(cin>>n>>m)
    {
    
    for(i=0;i<n;i++)
        for(int j=0;j<n;j++)
        i==j?e[i][j]=0:e[i][j]=inf;//本身置零,其他初始置无穷
    while(m--)
    {
        cin>>a>>b;
        e[a][b]=1;
        e[b][a]=1;
    }
    int flag=0;
    for(i=0;i<n;i++)
        for(int j=0;j<n;j++)
            for(int k=0;k<n;k++) //e[j][k]=min(e[j][k],e[j][i]+e[i][k]);
                if(e[j][i]+e[i][k]<e[j][k])
                        e[j][k]=e[j][i]+e[i][k]; //整个算法的核心,遍历经由每个点的路径长度,判断更新
    for(i=0;i<n&&!flag;i++)
        for(int j=0;j<n;j++)
            if(e[i][j]>7) flag=1;
    if(flag) cout<<"No"<<endl;
    else cout<<"Yes"<<endl;
}
    return 0;
}

其他类似的题:
http://acm.hdu.edu.cn/showproblem.php?pid=1874 这道题读入的时候要比较 两个地方之间可能有多条路,取最小

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容