FZU 1019 貓捉老鼠

來源:互聯網
上載者:User

 

貓捉老鼠

Time Limit:1s Memory limit:32M
Accepted Submit:470 Total Submit:1487

一隻貓和一隻老鼠在10*10的迷宮中。迷宮中的每個方格可以是空的,或者含有障礙。貓和老鼠可以進入任意一個空的方格中。當他們相遇時,貓和老鼠在同一個方格中。但是,無論貓或老鼠都不能進入有障礙的方格。我們可以用字元組成的二維數組表示迷宮,如所示。

 

 

老鼠在迷宮中按照一種固定的方式行走:每個時刻,老鼠都向它所面對的方向前進一格,這需要花費1秒時間。如果前方是一個障礙或者是迷宮的邊界,它將花1秒的時間按順時針方向轉90度。

為了抓到老鼠,這隻貓決定也按照與老鼠相同的行走方式行進。

貓和老鼠在每個單位時間內是同時行動的。因此,如果貓和老鼠在行進過程中“擦肩而過”,貓是無法捉到老鼠的。只有當貓和老鼠同時到達一個相同的格子時,貓才能捉住老鼠。
初始時,貓和老鼠不會在同一個方格中。並且它們都面向北方。
你的任務是編一個程式,求出貓捉到老鼠的所花時間。

輸入輸出格式

輸入資料的第一行n,表示輸入資料的組數。
每組資料由10行組成,每行10個字元,表示迷宮的地圖以及貓和老鼠的初始位置。輸入資料保證只有一隻貓和一隻老鼠。
每組輸入資料之後均有一個空行作為間隔。
對於每組給定的輸入,輸出一行僅含一個數,即貓捉到老鼠所花的時間。如果貓永遠都無法抓到老鼠,則輸出0。

範例輸入

1*...*...........*......*...*...............*.c....*.....*......*........m......*...*.*.....*.*......

範例輸出

49

解題:

        類比走的過程。先要取貓和老鼠的座標,然後類比兩隻動物一起行走的過程。在過程中,要對方向進行判別,東西南北可以用3210代替。判定永遠無法捉到老鼠的時候,可以設定一個較大的值,超過這個值,將無法捉到老鼠。這個要自己琢磨。

#include <iostream><br />using namespace std;<br />#define length 10<br />#define width 10<br />typedef struct<br />{<br />int x;<br />int y;<br />}Point;</p><p>void animalWhere(char map[][width],Point &mouse,Point &cat)<br />{<br />int i,j;<br />for (i=0;i<length;i++)<br />{<br />for (j=0;j<width;j++)<br />{<br />if (map[i][j]=='c')<br />{<br />cat.x=i;<br />cat.y=j;<br />map[i][j]='.';<br />continue;<br />}<br />if (map[i][j]=='m')<br />{<br />mouse.x=i;<br />mouse.y=j;<br />map[i][j]='.';<br />continue;<br />}<br />}<br />}<br />}</p><p>Point move(char map[][width],Point &animal,int &way)<br />{<br />if (way==0)<br />{<br />if (animal.x!=0 && map[animal.x-1][animal.y]!='*' )<br />{<br />animal.x--;<br />return animal;<br />}<br />if (animal.x==0 || map[animal.x-1][animal.y]=='*')<br />{<br />way=1;<br />return animal;<br />}<br />}<br />if (way==1)<br />{<br />if (animal.y!=width-1 && map[animal.x][animal.y+1]!='*' )<br />{<br />animal.y++;<br />return animal;<br />}<br />if (animal.y==width-1 || map[animal.x][animal.y+1]=='*')<br />{<br />way=2;<br />return animal;<br />}<br />}<br />if (way==2)<br />{<br />if (animal.x!=length-1 && map[animal.x+1][animal.y]!='*' )<br />{<br />animal.x++;<br />return animal;<br />}<br />if (animal.x==length-1 || map[animal.x+1][animal.y]=='*')<br />{<br />way=3;<br />return animal;<br />}<br />}<br />if (way==3)<br />{<br />if (animal.y!=0 && map[animal.x][animal.y-1]!='*' )<br />{<br />animal.y--;<br />return animal;<br />}<br />if (animal.y==0 || map[animal.x][animal.y-1]=='*')<br />{<br />way=0;<br />return animal;<br />}<br />}<br />}</p><p>int main()<br />{<br />int i,n,mouseWay,catWay,time;<br />Point mouse,cat;<br />char map[length][width];<br />cin>>n;<br />while (n--)<br />{<br />mouseWay=0;catWay=0;time=0;<br />memset(map,'/0',sizeof(map));<br />cin.ignore();<br />for (i=0;i<length;i++)<br />{<br />cin.getline(map[i],width+1);<br />}<br />animalWhere(map,mouse,cat);<br />while (1)<br />{<br />mouse=move(map,mouse,mouseWay);<br />cat=move(map,cat,catWay);<br />time++;<br />if (mouse.x==cat.x && mouse.y==cat.y)<br />{<br />break;<br />}<br />if (time>10000)<br />{<br />time=0;<br />break;<br />}<br />}<br />cout<<time<<endl;<br />}<br />return 0;<br />}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.