時限:1000ms 記憶體限制:10000k 總時限:3000ms
描述木乃伊地下宮殿是乙個6行6列的迷宮。作為敢到木乃伊地下宮殿裡去探險的你,有沒有跟木乃伊抓迷藏的心理準備呵!遊戲在木乃伊所在的迷宮裡展開,任務就是盡快趕到出口。你一次只能走一步,而木乃伊可以走兩步,但木乃伊是很笨的,他總是先盡量跟你達到同一列,如果已經是同一列了,他才會像你走來,有牆的地方人和木乃伊都不能過,你可以利用障礙物牽制住木乃伊。
輸入先輸入牆的數量n,然後在後續的n行裡每行有3個數表示一堵牆,3個數分別為格仔的行、列和牆的位置(0表示這個格仔的下方是牆,1表示這個格仔的右方是牆),再下來的3行每行2個數,分別表示木乃伊、人還有出口的位置。
輸出如果能安全逃生則輸出yes,否則輸出no,答案佔一行。
輸入樣例
50 0 0
1 1 1
1 4 1
3 4 1
4 3 0
3 33 1
5 5輸出樣例
no
#include
#include
using
namespace std;
int n;
int maze[6]
[6][
2];//儲存迷宮的牆
struct node
;//無效條件:越界、重複、被抓
node start,target;
queue q1;
int used[6]
[6][
6][6
];//判重
int walk[4]
[2]=
//返回人走一格的新位置座標
;void
input()
;//輸入函式
bool
bfs();
node moveto
(node cur,
int i)
;//返回節點cur擴充套件的下乙個節點next
bool
iswall
(int x,
int y,
int i)
;//判斷方格[x,y]方向是否是牆
intmain()
else
return0;
}void
input()
//最後三行
cin>>start.mx>>start.my;
cin>>start.px>>start.py;
cin>>target.px>>target.py;
//初始節點標記併入隊
used[start.mx]
[start.my]
[start.px]
[start.py]=1
; q1.
push
(start);}
bool
bfs(
)else
//未到達目標則入隊}}
}return
false
;//所有情況都不能到達目標,返回false
}//該函式返回節點cur擴充套件的新節點next
//人要向i方向走一步,木乃伊要向人靠近兩步
//節點無效條件:人越界、人撞牆、人被木乃伊抓到、節點next重複
node moveto
(node cur,
int i)
//木乃伊走兩步
next.mx=cur.mx;
next.my=cur.my;
int step=2;
while
(step--
)else
if(next.py!iswall
(next.mx, next.my,0)
)//若列數相等,則再到達同一行
else
if(next.py==next.my)
else
if(next.px!iswall
(next.mx, next.my,3)
)//若同行同列,則人被抓住,此節點無效,直接返回
else
if(next.px==next.mx)}}
//人和木乃伊都走完了
if(used[next.mx]
[next.my]
[next.px]
[next.py]
)//若節點重複,則節點無效
else
return next;
}//判斷方格[x,y]方向是否是牆
bool
iswall
(int x,
int y,
int i)
return-1
;//返回-1代表i值錯誤
}
NOJ1130 演算法實驗三 polygon
時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述在乙個周長為10000的圓上等距分布著n個點,即這n個點是乙個正n邊形的頂點。現在要另加m個點到圓上,新加的m個點可以任意選擇位置 可以與原有的點重合 然後將這n m個點中的一些點延圓周移動,最終使n m個點均勻分布,即在乙個正...
NOJ1043 演算法實驗三 跳馬
描述 在西洋棋中,馬的走法與中國象棋類似,即俗話說的 馬走日 下圖所示即西洋棋中馬 k 在一步能到達的格仔 其中黑色的格仔是能到達的位置 現有一200 200大小的西洋棋棋盤,棋盤中僅有乙個馬,給定馬的當前位置 s 和目標位置 t 求出馬最少需要多少跳才能從當前位置到達目標位置。輸入 本題包含多個測...
NOJ1084 演算法實驗四 花生公尺(三)
時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述五一長假第三天,tom和jerry在倉庫散步的時候又發現了一堆花生公尺 倉庫,又見倉庫 這次tom制定分花生公尺規則如下 1 tom和jerry輪流從堆中取出k粒花生公尺吃掉 2 第一次取花生公尺的人只能取一粒,以後取花生公尺的...