HDOJ-2112HDU Today(Floyd+MAP)

来源:互联网 发布:mac安装卸载软件 编辑:程序博客网 时间:2024/05/16 17:40

坑点:

1、要按双向边做

2、要记得处理出发点和终点相同的情况,直接输出0


#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>#include <iostream>#include <string>#include <map>using namespace std;const int MAXN=162;const int INF=0x3F3F3F3F;void work(int t){    int f[MAXN][MAXN];    int i,j,k,n,x,y,l;    string st,en;    map <string,int> num;    num.clear();    memset(f,0x3F,sizeof(f));    for(i=0;i<MAXN;i++) f[i][i]=0;    n=0;    cin>>st>>en;    num[st]=++n;    if(num.count(en))    {        cout<<0<<endl;        while(t--) cin>>st>>en>>l;;        return ;    }    else num[en]=++n;    while(t--)    {        cin>>st>>en>>l;        if(num.count(st))            x=num[st];        else        {            num[st]=++n;            x=n;        }        if(num.count(en))            y=num[en];        else        {            num[en]=++n;            y=n;        }        if(f[x][y]>l)            f[x][y]=f[y][x]=l;    }    for(k=1;k<=n;k++)        for(i=1;i<=n;i++)            for(j=1;j<=n;j++)                f[i][j]=min(f[i][j],f[i][k]+f[k][j]);    if(f[1][2]>=1500005) cout<<-1<<endl;        else cout<<f[1][2]<<endl;}int main(){    int n;    while(scanf("%d",&n),n!=-1)        work(n);    return 0;}


0 0
原创粉丝点击