日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

hdu2102 水搜索

發(fā)布時(shí)間:2025/6/17 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu2102 水搜索 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題意:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?A計(jì)劃

Problem Description
可憐的公主在一次次被魔王擄走一次次被騎士們救回來(lái)之后,而今,不幸的她再一次面臨生命的考驗(yàn)。魔王已經(jīng)發(fā)出消息說(shuō)將在T時(shí)刻吃掉公主,因?yàn)樗?tīng)信謠言說(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


思路:

? ? ? 直接搜索就行了,一開(kāi)始隨意寫(xiě)了個(gè),然后直接A了,A了之后突然感覺(jué)有問(wèn)題,應(yīng)該用優(yōu)先隊(duì)列,因?yàn)榇┰降哪莻€(gè)地方會(huì)讓所有點(diǎn)不同步,然后寫(xiě)了個(gè)優(yōu)先隊(duì)列的,還是A了,后來(lái)自己想了想,應(yīng)該是不用考慮優(yōu)先隊(duì)列,因?yàn)橹挥袃蓪?#xff0c;自己模擬幾組數(shù)據(jù)就明白了,但是在比賽的時(shí)候如果不確定,就最好寫(xiě)個(gè)優(yōu)先隊(duì)列,保險(xiǎn)。


#include<stdio.h> #include<string.h> #include<queue>#define N 15 using namespace std;typedef struct NODE {int x ,y ,z ,t;friend bool operator < (NODE a ,NODE b){return a.t > b.t; } }NODE;NODE xin ,tou; int mark[N][N][3]; int map[N][N][3]; int ex ,ey ,ez ,n ,m; int dir[4][2] = {0 ,1 ,0 ,-1 ,1 ,0 ,-1 ,0};bool ok(int x, int y ,int z) {if(x >= 1 && x <= n && y >= 1 && y <= m && !mark[x][y][z] && map[x][y][z])return 1;return 0; }int BFS(int sx ,int sy ,int sz ,int xzt) {xin.x = sx ,xin.y = sy ,xin.z = sz ,xin.t = 0;memset(mark ,0 ,sizeof(mark));mark[xin.x][xin.y][xin.z] = 1;priority_queue<NODE>q;q.push(xin);while(!q.empty()){tou = q.top();q.pop();if(tou.x == ex && tou.y == ey && tou.z == ez){if(tou.t <= xzt) return 1;return 0;}if(map[tou.x][tou.y][tou.z] == 2){if(map[tou.x][tou.y][tou.z^1] != 1 || mark[tou.x][tou.y][tou.z^1]) continue;xin = tou;xin.z ^= 1;q.push(xin);mark[tou.x][tou.y][tou.z^1] = 1;continue;}for(int i = 0 ;i < 4 ;i ++){xin.x = tou.x + dir[i][0];xin.y = tou.y + dir[i][1];xin.z = tou.z;xin.t = tou.t + 1;if(ok(xin.x ,xin.y ,xin.z)){mark[xin.x][xin.y][xin.z] = 1;q.push(xin);}}}return 0; }int main () {int c ,t ,i ,j ,sx ,sy ,sz;char str[N];scanf("%d" ,&c);while(c--){scanf("%d %d %d" ,&n ,&m ,&t);for(i = 1 ;i <= n ;i ++){scanf("%s" ,str);for(j = 0 ;j < m ;j ++){if(str[j] == 'S'){sx = i ,sy = j +1 ,sz = 0;map[i][j + 1][0] = 1;}if(str[j] == 'P'){ex = i ,ey = j + 1 ,ez = 0;map[i][j+1][0] = 1;}if(str[j] == '.') map[i][j+1][0] = 1;if(str[j] == '#') map[i][j+1][0] = 2;if(str[j] == '*') map[i][j+1][0] = 0;}}for(i = 1 ;i <= n ;i ++){scanf("%s" ,str);for(j = 0 ;j < m ;j ++){if(str[j] == 'S'){sx = i ,sy = j +1 ,sz = 1;map[i][j + 1][1] = 1;}if(str[j] == 'P'){ex = i ,ey = j + 1 ,ez = 1;map[i][j+1][1] = 1;}if(str[j] == '.') map[i][j+1][1] = 1;if(str[j] == '#') map[i][j+1][1] = 2;if(str[j] == '*') map[i][j+1][1] = 0;}}if(BFS(sx ,sy ,sz ,t)) puts("YES");else puts("NO");}return 0; }

總結(jié)

以上是生活随笔為你收集整理的hdu2102 水搜索的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。