兩隻牛逃跑到了森林裡。farmer john 開始用他的專家技術追捕這兩頭牛。你的任務是模擬他們的行為(牛和 john)。
追擊在 10×10 的平面網格內進行。乙個格仔可以是:乙個障礙物,兩頭牛(它們總在一起),或者 farmer john。兩頭牛和 farmer john 可以在同乙個格仔內(當他們相遇時),但是他們都不能進入有障礙的格仔。
乙個格仔可以是:
這裡有乙個地圖的例子:
*...*.....
......*...
...*...*..
..........
...*.f....
*.....*...
...*......
..c......*
...*.*....
.*.*......
牛在地圖裡以固定的方式遊蕩。每分鐘,它們可以向前移動或是轉彎。如果前方無障礙(地圖邊沿也是障礙),它們會按照原來的方向前進一步。否則它們會用這一分鐘順時針轉 90 度。 同時,它們不會離開地圖。
farmer john 深知牛的移動方法,他也這麼移動。
每次(每分鐘)farmer john 和兩頭牛的移動是同時的。如果他們在移動的時候穿過對方,但是沒有在同一格相遇,我們不認為他們相遇了。當他們在某分鐘末在某格仔相遇,那麼追捕結束。
讀入十行表示地圖。每行都只包含 10 個字元,表示的含義和上面所說的相同。保證地圖中只有乙個f
和乙個c
。f
和c
一開始不會處於同乙個格仔中。
計算 farmer john 需要多少分鐘來抓住他的牛,假設牛和 farmer john 一開始的行動方向都是正北(即上)。 如果 john 和牛永遠不會相遇,輸出 0。
輸入共十行,每行 10 個字元,表示如上文描述的地圖。
輸出乙個數字,表示 john 需要多少時間才能抓住牛們。如果 john 無法抓住牛,則輸出 0。
輸入 #1複製
*...*...........*...
...*...*..
..........
...*.f....
*.....*...
...*......
..c......*
...*.*....
.*.*......
輸出 #1複製
49這道題還是有學到很多東西的
從設計移動函式,判斷是否抓到,到如何判斷出現重複情況
具體見**:
#include#include#include
#include
#include
#include
using
namespace
std;
char map[12][12];//
地圖int fx, fy, cx, cy;//
農夫和牛的座標
int direction_f = 0, direction_c = 0;//
農夫和牛的方向
int coordinatemove[4][2] = ,,, };
bool judge[160005
];int seconds = 0
;bool verdict()//
判斷是否抓住了
void
move()
intmain()
while
(verdict())
judge[p] = 1
; }
cout
}
這裡的特徵值值得一提
為什麼要
fx + fy * 10 + cx * 100 + cy * 1000 + direction_f * 10000 + direction_c * 40000
這樣算呢?
這是因為,fx,fy,cx.cy各有十種取值,direction_f,direction_c各有4種取值,這樣算出的,是乙個特徵值,每一步的特徵值都是不一樣的,而如果出現一樣的情況,說明出現死迴圈了,農夫永遠抓不到牛。
洛谷刷題 P1003 鋪地毯
為了準備乙個獨特的頒獎典禮,組織者在會場的一片矩形區域 可看做是平面直角座標系的第一象限 鋪上一些矩形地毯。一共有 n 張地毯,編號從 1 到 n。現在將這些地毯按照編號從小到大的順序平行於座標軸先後鋪設,後鋪的地毯覆蓋在前面已經鋪好的地毯之上。地毯鋪設完成後,組織者想知道覆蓋地面某個點的最上面的那...
刷題 洛谷 P4209 學習小組
共有n個學生,m個學習小組,每個學生只願意參加其中的一些學習小組,且乙個學生最多參加k個學習小組。每個學生參加學習小組財務處都收一定的手續費,不同的學習小組有不同的手續費。若有a個學生參加第i個學習小組,財務處支付獎勵 c i times a 2 元。在參與學生 而不是每個學習小組的人數總和 盡量多...
刷題 洛谷 P4142 洞穴遇險
zrq在洞穴中準備採集礦物的時候遇險了!洞穴要塌了!整個洞穴是乙個 n n 的方格圖,每個格仔形如 x,y 1 le x,y le n 其中 x 表示從上到下的行數,y 表示從左到右的列數。1,1 在左上角,1,n 在右上角,n,1 在左下角,n,n 在右下角。滿足 x y 為奇數格仔的有乙個不穩定...