SDUT 1867 最短路径问题 (Floyd 多源)

来源:互联网 发布:ip 校验 java 编辑:程序博客网 时间:2024/05/06 02:27
#include<map>#include<queue>#include<cmath>#include<iostream>#include<cstdio>#include<stack>#include<cstring>#include<algorithm>#define LL int#define inf 0x3f3f3f3f#define ls l,mid,rt<<1#define rs mid+1,r,rt<<1|1const double PI=acos(-1.0);using namespace std;struct node{    int x,y;    double s;}q[10000];double mp[200][200];void floyd(int n){    int i,j,k;    for(k=1;k<=n;k++){        for(i=1;i<=n;i++){            for(j=1;j<=n;j++){                if(mp[i][j]>mp[i][k]+mp[k][j]){                    mp[i][j]=mp[i][k]+mp[k][j];                }            }        }    }}int main(){    int n,m,a,b,k,i,j;    while(~scanf("%d",&n)){        for(i=1;i<=n;++i){            for(j=1;j<=n;++j){                if(i==j) mp[i][j]=0;                else{                    mp[i][j]=inf;                }            }        }        for(i=1;i<=n;i++){            scanf("%d%d",&q[i].x,&q[i].y);        }        scanf("%d",&m);        for(i=0;i<m;++i){            scanf("%d%d",&a,&b);            double p=sqrt( (q[a].x-q[b].x)*(q[a].x-q[b].x)+(q[a].y-q[b].y)*(q[a].y-q[b].y) );            if(mp[a][b]>p){                mp[a][b]=mp[b][a]=p;            }        }        floyd(n);        scanf("%d%d",&a,&b);        printf("%.2lf\n",mp[a][b]);    }    return 0;}
0 0
原创粉丝点击