T001:兔子与樱花 最短路及路径

来源:互联网 发布:seo和sem的区别与联系 编辑:程序博客网 时间:2024/05/20 18:45

http://jmunetds.openjudge.cn/ex6/T001/

#include <iostream>#include <cstdio>#include <map>#include <string>#define MAX 35//#include<cctype>using namespace std; const int INF=0x3f3f3f3f;map<string,int> name;map<int,string> num;int p,q,r;int a[MAX][MAX];int nex[MAX][MAX];void flyod(){    for(int k=1;k<=p;k++)        for(int i=1;i<=p;i++)            for(int j=1;j<=p;j++){                if(a[i][j]>a[i][k]+a[k][j]){                    a[i][j]=a[i][k]+a[k][j];                    nex[i][j]=nex[i][k];                }            }}void print(int st,int ed){    cout<<num[st];    if(st==ed){        cout<<endl;        return;    }    printf("->(%d)->",a[st][nex[st][ed]]);    print(nex[st][ed],ed);}int main(){    scanf("%d",&p);    for(int i=1;i<=p;i++){        string str;        cin>>str;        name[str]=i;        num[i]=str;    }    for(int i=1;i<=p;i++)        for(int j=1;j<=p;j++){            if(i==j)    a[i][j]=0;            else a[i][j]=INF;            nex[i][j]=j;        }    scanf("%d",&q);    for(int i=1;i<=q;i++){        string str1,str2;        int w;        cin>>str1>>str2;        scanf("%d",&w);        a[name[str1]][name[str2]]=w;        a[name[str2]][name[str1]]=w;    }               flyod();    scanf("%d",&r);    for(int i=1;i<=r;i++){        string str1,str2;        cin>>str1>>str2;        print(name[str1],name[str2]);    }    return 0;}
原创粉丝点击