HDU-2102 A计划 dfs
生活随笔
收集整理的這篇文章主要介紹了
HDU-2102 A计划 dfs
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Description
可憐的公主在一次次被魔王擄走一次次被騎士們救回來(lái)之后,而今,不幸的她再一次面臨生命的考驗(yàn)。魔王已經(jīng)發(fā)出消息說(shuō)將在T時(shí)刻吃掉公主,因?yàn)樗犘胖{言說(shuō)吃公主的肉也能長(zhǎng)生不老。年邁的國(guó)王正是心急如焚,告招天下勇士來(lái)拯救公主。不過(guò)公主早已習(xí)以為常,她深信智勇的騎士LJ肯定能將她救出。?現(xiàn)據(jù)密探所報(bào),公主被關(guān)在一個(gè)兩層的迷宮里,迷宮的入口是S(0,0,0),公主的位置用P表示,時(shí)空傳輸機(jī)用#表示,墻用*表示,平地用.表示。騎士們一進(jìn)入時(shí)空傳輸機(jī)就會(huì)被轉(zhuǎn)到另一層的相對(duì)位置,但如果被轉(zhuǎn)到的位置是墻的話,那騎士們就會(huì)被撞死。騎士們?cè)谝粚又兄荒芮昂笞笥乙苿?dòng),每移動(dòng)一格花1時(shí)刻。層間的移動(dòng)只能通過(guò)時(shí)空傳輸機(jī),且不需要任何時(shí)間。
Input
輸入的第一行C表示共有C個(gè)測(cè)試數(shù)據(jù),每個(gè)測(cè)試數(shù)據(jù)的前一行有三個(gè)整數(shù)N,M,T。 N,M迷宮的大小N*M(1 <= N,M <=10)。T如上所意。接下去的前N*M表示迷宮的第一層的布置情況,后N*M表示迷宮第二層的布置情況。Output
如果騎士們能夠在T時(shí)刻能找到公主就輸出“YES”,否則輸出“NO”。Sample Input
1 5 5 14 S*#*. .#... ..... ****. ...#. ..*.P #.*.. ***.. ...*. *.#..Sample Output
YES dfs #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n,m,t,p; char map[4][20][20]; int v[3][20][20]; int yi[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; void dfs(int x,int y,int k,int time) {if (time>t||p==1) return ;if (map[k%2][x][y]=='P') {p=1;return ;}int i,rx,ry,a;for (i=0;i<4;i++){a=0;rx=x+yi[i][0];ry=y+yi[i][1];if (map[k%2][rx][ry]=='#') a=1;if (map[(k+a)%2][rx][ry]=='#') continue;if (rx>=0&&rx<n&&ry>=0&&ry<m&&map[(k+a)%2][rx][ry]!='*'&&!v[(k+a)%2][rx][ry]){v[(k+a)%2][rx][ry]=1;dfs(rx,ry,k+a,time+1);v[(k+a)%2][rx][ry]=0;}} } int main() {int c,i,j,k;scanf("%d",&c);while (c--){scanf("%d%d%d",&n,&m,&t);for (k=0;k<2;k++)for (i=0;i<n;i++)for (j=0;j<m;j++) scanf(" %c",&map[k][i][j]);p=0;memset(v,0,sizeof(v));map[0][0][0]='*';dfs(0,0,0,0);if (p) printf("YES\n");else printf("NO\n");}return 0; }?
?
轉(zhuǎn)載于:https://www.cnblogs.com/pblr/p/4698620.html
總結(jié)
以上是生活随笔為你收集整理的HDU-2102 A计划 dfs的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 武警魔鬼训练一个月回中队能当班长吗
- 下一篇: 1.SharePoint2010初接触