Bessie Come Home

来源:互联网 发布:陕西省广电网络营业厅 编辑:程序博客网 时间:2024/06/06 02:40
//用dijstra算法找到Z到其余各个顶点的最小距离,然后判断最小距离中离大写字母的顶点中最小的返回#include<fstream>#include<iostream>#include<string>using namespace std;int maxdist=100000000;int dest[60];int dist[100][100];//a[][]保存各个牧场的距离,不相连就是maxdistint s[60]={0};//s[i]保存i是否进入s集合void dijstra(int n,int v,int dist[100][100],int s[60],int dest[60]){int i,j;for(i=1;i<=v;i++){dest[i]=dist[i][v];}dest[v]=0;s[v]=1;for(i=1;i<=v-1;i++){int tmp=maxdist;int u=v;for(j=1;j<=v;j++)//找距离最小的{if(!s[j] && dest[j]<tmp){tmp=dest[j];u=j;}}s[u]=1;for(j=1;j<=v;j++){if(!s[j] && dist[u][j]<maxdist){if(dest[j]>dest[u]+dist[u][j])dest[j]=dest[u]+dist[u][j];}}}}int main(){ifstream fin ("comehome.in");ofstream fout ("comehome.out");int i,j,p;for(i=1;i<=99;i++){for(j=1;j<=99;j++){dist[i][j]=maxdist;}}for(i=1;i<=59;i++)dest[i]=10001;fin>>p;for(i=1;i<=p;i++){char a,b;int d,k,l;fin>>a>>b>>d;//大写字母保存在27--52之间,小写字母保存在1--26之间if(a>='A' && a<='Z'){k=(int)a-38;}else k=(int)a-96;if(b>='A' && b<='Z'){l=(int)b-38;}else l=(int)b-96;if(dist[k][l]>d){dist[k][l]=d;dist[l][k]=d;}}dijstra(1,52,dist,s,dest);int temp=maxdist;for(i=27;i<=51;i++){if(dest[i]<temp){temp=dest[i];j=i;}}fout<<(char)(j+38)<<' '<<temp<<endl;return 0;}

原创粉丝点击