乙隻貓和乙隻老鼠在10*10的迷宮中。迷宮中的每個方格可以是空的,或者含有障礙。貓和老鼠可以進入任意乙個空的方格中。當他們相遇時,貓和老鼠在同乙個方格中。但是,無論貓或老鼠都不能進入有障礙的方格。我們可以用字元組成的二維陣列表示迷宮,如下圖所示。
老鼠在迷宮中按照一種固定的方式行走:每個時刻,老鼠都向它所面對的方向前進一格,這需要花費1秒時間。如果前方是乙個障礙或者是迷宮的邊界,它將花1秒的時間按順時針方向轉90度。
為了抓到老鼠,這只貓決定也按照與老鼠相同的行走方式行進。
貓和老鼠在每個單位時間內是同時行動的。因此,如果貓和老鼠在行進過程中「擦肩而過」,貓是無法捉到老鼠的。只有當貓和老鼠同時到達乙個相同的格仔時,貓才能捉住老鼠。
初始時,貓和老鼠不會在同乙個方格中。並且它們都面向北方。
你的任務是編乙個程式,求出貓捉到老鼠的所花時間。
input
輸入資料的第一行n,表示輸入資料的組數。
每組資料由10行組成,每行10個字元,表示迷宮的地圖以及貓和老鼠的初始位置。輸入資料保證只有乙隻貓和乙隻老鼠。
每組輸入資料之後均有乙個空行作為間隔。
output
對於每組給定的輸入,輸出一行僅含乙個數,即貓捉到老鼠所花的時間。如果貓永遠都無法抓到老鼠,則輸出0。
sample input
1 ……..
……*…
……..
……….
…*.c….
…..…
…*……
..m……*
….….
..……
sample output
49題意:
有個迷宮,有乙隻貓和乙隻老鼠,他們按同種方式行走,一開始面朝北方,走一格花一秒,如果是障礙或者邊界,就順時針轉90度。轉方向一次也是一秒,當他們走到乙個格仔就結束。擦肩而過就是倆人面對面,但是下一秒倆人走到了對方的格仔,這一種不算抓住。
思路:
模擬他們的行走的方式,就可以判斷了,但是有個問題,如果永遠遇不到,怎麼判斷。有倆種方法,一種是開乙個標記陣列,如果在某一刻,他們回到過去乙個相同的狀態,那麼他們就進入迴圈。
一種是,迴圈到一定次數後直接跳出。你可以假定一萬,一萬不行,十萬。好像有個方法可以算出來。我是第一種。
# include
# include
using
namespace
std;
int dx[4] = ;
int dy[4] = ; //前進的變數,分別是上,左,下,右,對應於順時針的順序
int main()
for(int i = 0;i < 10;i++)
if(a[i][j] == 'm')}}
int ans = 0;
while(true) //迴圈,模擬他們的行進過程
else
//否則就轉方向
c = (c+1) % 4;
}else
//超出邊界轉向
if(x[1]+dx[m] >= 0 && x[1]+dx[m] < 10 && y[1]+dy[m] >= 0 && y[1]+dy[m] < 10)
else
m = (m+1) % 4;
}else
m = (m+1) % 4;
if(mark[x[0]][y[0]][x[1]][y[1]][c][m] == 1) //如果變化後的狀態已經出現過,跳出
ans++;
if(x[0] == x[1] && y[0] == y[1]) //如果貓和老鼠在乙個格仔,就跳出
break;
}if(f)
printf("0\n");
else
printf("%d\n",ans);
}return
0;}
習題 168 貓捉老鼠
有乙隻很霸道的貓,捉來好多好多老鼠,然後,這只貓就開始開大餐了。但為了顯得它與眾不同,它用了乙個很特別的就餐順序 它先定好步長k,然後它吃掉第1個位置上的,然後再每隔k只再吃乙隻老鼠 一輪結束後,它再次從第1個位置開始繼續吃,直到最後只剩下乙隻老鼠為止。而這最後乙隻老鼠這只貓會放走,因為它不想破壞生...
貓捉老鼠(python)解析
import turtle 海龜庫 import time import random 定義上下左右按鍵內容,此處b為老鼠 def up b.setheading 90 按x y座標算,轉90 b.forward 30 30個畫素 def down b.setheading 270 b.forwar...
貓捉老鼠問題系列(一)
形象化的數學問題,總是引人入勝,這個世界創意還是很重要的。從網上收集了一些貓和老鼠的數學話題,僅供欣賞之。在數軸上,0的位置停著乙個不動的老鼠,1的位置在初始時刻有乙隻貓。貓是可以走動的,每一步在數軸上分別以二分之一的概率或朝著正方向或朝著負方向走1的距離。當貓到達0的位置時,貓就抓到老鼠了,遊戲結...