您的位置:首页 > 其它

USACO2.4.4 Bessie Come Home (comehome)

2015-01-29 17:48 253 查看
题差不多是一个裸的单源最短路,用Dijkstra、Floyd、SPFA做都可以

其中Floyd是(N^3),Dijkstra和SPFA都是(N^2),但因为数据范围很小(只有52个字母),用哪一种都可以

这里用的是Floyd(因为Floyd比较好写)

/*
ID:xsy97051
LANG:C++
TASK:comehome
*/
#include <iostream>
#include <cstdio>
#define INF 1000000000
using namespace std;
int p,dis[53][53];

int zhuan(char c)
{
if ((c>='a')&&(c<='z')) return (c-'a'+27);
if ((c>='A')&&(c<='Z')) return (c-'A'+1);
}

int main()
{
freopen("comehome.in","r",stdin);
freopen("comehome.out","w",stdout);
cin>>p;
for(int i=1;i<=52;i++)
for(int j=1;j<=52;j++)
dis[i][j]=INF;

for(int i=1;i<=p;i++)
{
char c;
int x,y,d;
cin>>c;  x=zhuan(c);
cin>>c;  y=zhuan(c);
cin>>d;
if(d<dis[x][y])
dis[x][y]=dis[y][x]=d;
}

for(int k=1;k<=52;k++)
for(int i=1;i<=52;i++)
for(int j=1;j<=52;j++)
dis[i][j]=min(dis[i][k]+dis[k][j],dis[i][j]);

int ans=INF,k;
for(int i=1;i<=25;i++)
if(dis[i][26]<ans)
{
ans=dis[i][26];
k=i;
}
cout<<char(k+'A'-1)<<" "<<ans<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: