• Floyed-Warshall算法(求任意两点间最短距离)


    思路:感觉有点像暴力啊,反正我是觉得很暴力,比如求d[i][j],用这个方法求的话,就直接考虑会不会经过点k(k是任意一点) ,最终求得最小值

    看代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<stdio.h>
    #include<string.h>
    #include<cmath>
    #include<math.h>
    #include<algorithm>
    #include<set>
    #include<queue>
    #include<map>
    typedef long long ll;
    using namespace std;
    const ll mod=1e9+7;
    const int maxn=1e3+10;
    const int maxk=100+10;
    const int maxx=1e4+10;
    const ll maxe=1000+10;
    #define INF 0x3f3f3f3f3f3f
    int v,e;
    ll d[maxn][maxn];//cost[u][v]代表边(u,v)的权值,不存在时初始化无穷大,同一点为0
    bool vis[maxn];
    void solve()
    {
        for(int i=0;i<v;i++)
        {
            for(int j=0;j<v;j++)
            {
                for(int k=0;k<v;k++)
                    d[j][k]=min(d[j][k],d[j][i]+d[i][k]);
            }
        }
        for(int i=0;i<v;i++)
        {
    
            for(int j=i+1;j<v;j++)
            cout<<i<<" "<<j<<" "<<d[i][j]<<" "<<endl;
        }
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin>>v>>e;
        for(int i=0;i<v;i++)
        {
            for(int j=0;j<v;j++)
                d[i][j]=INF;
            d[i][i]=0;
    
        }
        int a,b,va;
        for(int i=0;i<e;i++)
        {
            cin>>a>>b>>va;
            d[a][b]=va;
        }
        solve();
        return 0;
    }
    当初的梦想实现了吗,事到如今只好放弃吗~
  • 相关阅读:
    bzoj2434: [Noi2011]阿狸的打字机
    bzoj2830: [Shoi2012]随机树
    题解,作业*2
    bzoj1901: Zju2112 Dynamic Rankings
    luogu P4178 Tree
    CF1042C Array Product 分类讨论+贪心
    CF946D Timetable 动态规划
    CF597C Subsequences 树状数组 + 动态规划
    CF912D Fishes 期望 + 贪心
    bzoj 4321 queue2 dp
  • 原文地址:https://www.cnblogs.com/caijiaming/p/9381631.html
Copyright © 2020-2023  润新知