P1518 两只塔姆沃斯牛 The Tamworth Two(简单的搜索题)
題目描述
兩只牛逃跑到了森林里。農夫John開始用他的專家技術追捕這兩頭牛。你的任務是模擬他們的行為(牛和John)。
追擊在10x10的平面網格內進行。一個格子可以是:
一個障礙物, 兩頭牛(它們總在一起), 或者 農民John. 兩頭牛和農民John可以在同一個格子內(當他們相遇時),但是他們都不能進入有障礙的格子。
一個格子可以是:
. 空地
- 障礙物
C 兩頭牛
F 農民John
這里有一個地圖的例子:
……
…*…
………
…
…*.F…
……
…*…
…C…*
….…
..…
牛在地圖里以固定的方式游蕩。每分鐘,它們可以向前移動或是轉彎。如果前方無障礙(地圖邊沿也是障礙),它們會按照原來的方向前進一步。否則它們會用這一分鐘順時針轉90度。 同時,它們不會離開地圖。
農民John深知牛的移動方法,他也這么移動。
每次(每分鐘)農民John和兩頭牛的移動是同時的。如果他們在移動的時候穿過對方,但是沒有在同一格相遇,我們不認為他們相遇了。當他們在某分鐘末在某格子相遇,那么追捕結束。
讀入十行表示農夫John,兩頭牛和所有障礙的位置的地圖。每行都只包含10個字符,表示的含義和上面所說的相同,你可以確定地圖中只有一個’F’和一個’C’.'F’和’C’一開始不會處于同一個格子中。
計算農夫John需要多少分鐘來抓住他的牛,假設牛和農夫John一開始的行動方向都是正北(即上)。 如果John和牛永遠不會相遇,輸出0。
輸入輸出格式
輸入格式:
每行10個字符,表示如上文描述的地圖。
輸出格式:
輸出一個數字,表示John需要多少時間才能抓住牛們。如果John無法抓住牛,則輸出0。
輸入輸出樣例
輸入樣例#1:
……
……
………
…
….F…
……
……
…C…
….…
..…
輸出樣例#1:
49
說明
翻譯來自NOCOW
USACO 2.4
農夫抓兩頭牛,農夫跟牛的行進方式一樣,但是要注意
這種情況不算相遇。
#include<bits/stdc++.h> using namespace std; const int dx[4]={-1,0,1,0};//上、右、下、左四個方向 const int dy[4]={0,1,0,-1}; int cx,cy,ct; int fx,fy,ft; bool f[21][21],v[21][21][4][21][21][4]; void dfs(int k) {if(cx==fx && cy==fy){printf("%d\n",k);return ;}if(v[fx][fy][ft][cx][cy][ct]==false){printf("0\n");return;}v[fx][fy][ft][cx][cy][ct]=false;if(f[cx+dx[ct]][cy+dy[ct]]==false){ct++;if(ct==4) ct=0;}else cx=cx+dx[ct],cy=cy+dy[ct];if(f[fx+dx[ft]][fy+dy[ft]]==false){ft++;if(ft==4) ft=0;}else fx=fx+dx[ft],fy=fy+dy[ft];dfs(k+1);} int main() {int i,j;char st[21];memset(f,false,sizeof(f));for(i=1;i<=10;i++){scanf("%s",st+1);for(j=1;j<=10;j++){if(st[j]=='.') f[i][j]=true;if(st[j]=='F') fx=i,fy=j,f[i][j]=true;if(st[j]=='C') cx=i,cy=j,f[i][j]=true;}}ct=ft=0;memset(v,true,sizeof(v));dfs(0);return 0; } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的P1518 两只塔姆沃斯牛 The Tamworth Two(简单的搜索题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 激励团队的游戏有哪些
- 下一篇: 梦幻诛仙手游装备启灵攻略有哪些