【图论】【最短路】【SPFA】【USACO题库】2.4.4 Bessie Come Home回家(jzoj 1274)
生活随笔
收集整理的這篇文章主要介紹了
【图论】【最短路】【SPFA】【USACO题库】2.4.4 Bessie Come Home回家(jzoj 1274)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Bessie Come Home回家
題目大意:
有n條路連接著一些牧場,每個牧場由‘a-z’(沒羊)和‘A-Y’(有一頭羊),問哪個有羊的牧場離‘Z’最近
INPUT FORMAT
第 1 行: 整數 P(1<= P<=10000),表示連接牧場(谷倉)的道路的數目。
第 2 …P+1行: 用空格分開的兩個字母和一個整數:
被道路連接牧場的標記和道路的長度(1<=長度<=1000)。
SAMPLE INPUT
5
A d 6
B d 3
C e 9
d Z 8
e Z 3
OUTPUT FORMAT
單獨的一行包含二個項目:
最先到達谷倉的母牛所在的牧場的標記,和這只母牛走過的路徑的長度。
SAMPLE OUTPUT
B 11
解題思路:
首先字符先進行一些操作變成數字,然后用SPFA,求出最短路,然后從有羊的牧場中選離‘Z’最近的牧場,然后再轉換成字符,再輸出,還要輸出他的距離
#include<cstdio> #include<iostream> #include<cstring> #include<queue> using namespace std; int h,now,w,g,ans,n,x,y,c[60],b[60],head[60],p[60]; char st,st1; struct rec {int to,l,next; }f[20005]; int main() {scanf("%d",&n);for (int i=1;i<=n;i++){cin>>st>>st1;if (st>='a'&&st<='z') x=st-'a'+1;//小寫else {x=st-'A'+27;//大寫c[x]=1;//記錄}if (st1>='a'&&st1<='z') y=st1-'a'+1;else {y=st1-'A'+27;c[y]=1;}scanf("%d",&g);f[++w].to=y;//去向f[w].l=g;//距離f[w].next=head[x];//下一條線head[x]=w;//x點的第一條線f[++w].to=x;f[w].l=g;f[w].next=head[y];head[y]=w;}memset(b,127/3,sizeof(b));//預處理queue<int>d; d.push(52);//入隊p[52]=1;//記錄b[52]=0;//預處理while(!d.empty())//結束沒{now=d.front();//去出頭元素d.pop();//出隊for (int i=head[now];i;i=f[i].next)//連接此點的每一條線if (b[now]+f[i].l<b[f[i].to])//判斷是否更優{b[f[i].to]=b[now]+f[i].l;//代替if(!p[f[i].to])//判斷是否在隊列內{d.push(f[i].to);//入隊p[f[i].to]=1;//記錄}}p[now]=0;//清空}ans=2147483647;//預處理for(int i=1;i<52;++i)//每一個牧場if (c[i]&&b[i]<ans)//有沒有羊,是否更優{ans=b[i];//代替h=i;//記錄}if (h<=26) putchar('a'+h-1);//弄回字符else putchar('A'+h-27);printf(" %d",ans);//輸出 }總結
以上是生活随笔為你收集整理的【图论】【最短路】【SPFA】【USACO题库】2.4.4 Bessie Come Home回家(jzoj 1274)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【结论】立体井字棋(jzoj 2124)
- 下一篇: 【最短路】【Dijkstra】【图论】最