您的位置:首页 > 其它

最短路坑题——贝西回家 uscow2.2.4

2016-01-30 09:42 281 查看
这道题坑点太多了:

1. 一共有51个牧场,而不是25个;

2.两个牧场之间可能有多条路,要取最短的一条;

3.这是无向图;

4.字符的输入比较坑爹。

代码如下:

#include<cstdio>
#include<iostream>
#include<vector>
const int inf=100000;
using namespace std;
vector<int>cow; //记下有牛的牧场
int m,n,x,y,dist[105],map[105][105],vis[105];
void input(){
int i,t,x,y,w,j;
char p,q;
cin>>n;
for(i=1;i<=52;i++)
for(j=1;j<=52;j++)
map[i][j]=inf;
for(i=1;i<=2*n;i+=2){
scanf("\n%c %c %d",&p,&q,&w);
if(p>='A'&&p<'Z'){
x=int(p)-65+1+26;
cow.push_back(x);
}
else if(p>90)x=int(p)-'a'+1;
else x=52;
if(q>='A'&&q<'Z'){
y=int(q)-65+1+26;
cow.push_back(y);
}
else if(q>90)y=int(q)-'a'+1;
else y=52;
map[x][y]=min(w,map[x][y]);
map[y][x]=map[x][y];
}
}
void solve(){ //Floyd算法
int i,k,j,ans,minn=inf;
for(k=1;k<=52;k++)
for(i=1;i<=52;i++)
for(j=1;j<=52;j++)
if(map[i][j]>map[i][k]+map[k][j])map[i][j]=map[i][k]+map[k][j];
for(i=0;i<cow.size();i++)
if(map[cow[i]][52]<minn)minn=map[cow[i]][52],ans=cow[i];
printf("%c %d",char('A'+ans-27),minn);
}
int main(){
input();
solve();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: