時限:1000ms 記憶體限制:10000k 總時限:3000ms
描述獨輪車的輪子上有紅、黃、藍、白、綠(依順時針序)5種顏色,在乙個如下圖所示的20*20的迷宮內每走乙個格仔,輪子上的顏色變化一次。獨輪車只能向前推或在原地轉向。每走一格或原地轉向90度均消耗乙個單位時間。現給定乙個起點(s)和乙個終點(t),求獨輪車以輪子上的指定顏色到達終點所需的最短時間。
輸入本題包含乙個測例。測例中分別用乙個大寫字母表示方向和輪子的顏色,其對應關係為:e-東、s-南、w-西、n-北;r-紅、y-黃、b-藍、w-白、g-綠。在測試資料的第一行有以空格分隔的兩個整數和兩個大寫字母,分別表示起點的座標s(x,y)、輪子的顏色和開始的方向,第二行有以空格分隔的兩個整數和乙個大寫字母,表示終點的座標t(x,y)和到達終點時輪子的顏色,從第三行開始的20行每行內包含20個字元,表示迷宮的狀態。其中'x'表示建築物,'.'表示路.
輸出在單獨的一行內輸出乙個整數,即滿足題目要求的最短時間。
輸入樣例
3 4 r n
15 17 y
******************xx
x.x...******......xx
x.x.x.....x..***x..x
x.******x.******xx.x
x.x.xx....x........x
x...***xx.x.xx.x.***
x.x.xx....x.x..x.x.x
x.x.x..xx...***x.***
x.x.xx.xx.x....x.x.x
x.x....xx.x.xx.x.x.x
x.x.x.***xx.xx.x.***
x.x.x.***xx....x...x
x.x.......x.xx...x.x
x.***.***.x.******xx
x.....xx.......x...x
***xx....x.******x.x
x..******x.***.***.x
x.xx...........x...x
x..x.***x.***x...***
******************xx
輸出樣例
廣搜高階版。每個狀態對應四個引數:x,y,顏色,方向。所以用四維陣列記錄狀態。
#include #include #include #include using namespace std;
int dx[4]=;
int dy[4]=;
int gx,gy,gc;
bool used[20][20][4][5];
struct node
;node now,next;
bool judge()
int bfs()
if(judge())//前進
next.x=now.x;
next.y=now.y;
next.color=now.color;
next.dir=(now.dir+1)%4;//右轉
if(used[next.x][next.y][next.dir][next.color]==false)
next.dir=(now.dir+3)%4;//左轉
if(used[next.x][next.y][next.dir][next.color]==false)
}return 0;
}int main()
switch(cc)
cin>>gx>>gy;
getchar();
cin>>cc;
switch(cc)
for(int i=0;i<20;i++)
printf("%d\n",bfs());
return 0;
}
演算法練習 NOJ 1044 獨輪車
時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述 獨輪車的輪子上有紅 黃 藍 白 綠 依順時針序 5種顏色,在乙個如下圖所示的20 20的迷宮內每走乙個格仔,輪子上的顏色變化一次。獨輪車只能向前推或在原地轉向。每走一格或原地轉向90度均消耗乙個單位時間。現給定乙個起點 s 和...
1044 火星數字
火星人是以13進製計數的 例如地球人的數字 29 翻譯成火星文就是 hel mar 而火星文 elo nov 對應地球數字 115 為了方便交流,請你編寫程式實現地球和火星數字之間的互譯。輸入格式 輸入第一行給出乙個正整數n 100 隨後n行,每行給出乙個 0,169 區間內的數字 或者是地球文,或...
1044 火星數字
時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 chen,yue 火星人是以13進製計數的 例如地球人的數字 29 翻譯成火星文就是 hel mar 而火星文 elo nov 對應地球數字 115 為了方便交流,請你編寫程式實現地球和火...