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

来源:互联网 发布:ws小世界网络模型 编辑:程序博客网 时间:2024/06/06 12:47

这道题坑点太多了:

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();}


0 0
原创粉丝点击