Floyd模板

求多对最短路问题,问题很显然效率慢。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<stack>
#include<stdlib.h>
#include<map>
#include<vector>
#include<queue>
#include<set>
#include<ctype.h>
#define zuida 100000
const int INF=1e9;
using namespace std;
#define maxn 2005
int mapp[maxn][maxn];
int n,m;
void init()
{
    for(int i=1;i<=m;i++)
        for(int j=1;j<=m;j++)
        mapp[i][j]=INF;
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int a,b,c;
        cin>>a>>b>>c;
        mapp[a][b]=c;
        mapp[b][a]=c;
    }
    for(int k=1;k<=n;k++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
            mapp[i][j]=min(mapp[i][j],mapp[i][k]+mapp[k][j]);
    for(int i=1;i<=n;i++)
    {
        int x,y;
        cin>>x>>y;
        cout<<mapp[x][y]<<endl;
    }
    return 0;

}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<stack>
#include<stdlib.h>
#include<map>
#include<vector>
#include<queue>
#include<set>
#include<ctype.h>
#define zuida 100000
const int INF=1e9;
using namespace std;
#define maxn 2005
int mapp[maxn][maxn];
int n,m;
void init()
{
    for(int i=1;i<=m;i++)
        for(int j=1;j<=m;j++)
        mapp[i][j]=INF;
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int a,b,c;
        cin>>a>>b>>c;
        mapp[a][b]=c;
        mapp[b][a]=c;
    }
    for(int k=1;k<=n;k++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
            mapp[i][j]=min(mapp[i][j],mapp[i][k]+mapp[k][j]);
    for(int i=1;i<=n;i++)
    {
        int x,y;
        cin>>x>>y;
        cout<<mapp[x][y]<<endl;
    }
    return 0;

}

 

posted @ 2018-04-19 20:28  翛宁  阅读(130)  评论(0编辑  收藏  举报