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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDU 5025:Saving Tang Monk(BFS + 状压)

發布時間:2023/12/18 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU 5025:Saving Tang Monk(BFS + 状压) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://acm.hdu.edu.cn/showproblem.php?pid=5025

?

Saving Tang Monk

?

Problem Description 《Journey to the West》(also 《Monkey》) is one of the Four Great Classical Novels of Chinese literature. It was written by Wu Cheng'en during the Ming Dynasty. In this novel, Monkey King Sun Wukong, pig Zhu Bajie and Sha Wujing, escorted Tang Monk to India to get sacred Buddhism texts.?

During the journey, Tang Monk was often captured by demons. Most of demons wanted to eat Tang Monk to achieve immortality, but some female demons just wanted to marry him because he was handsome. So, fighting demons and saving Monk Tang is the major job for Sun Wukong to do.

Once, Tang Monk was captured by the demon White Bones. White Bones lived in a palace and she cuffed Tang Monk in a room. Sun Wukong managed to get into the palace. But to rescue Tang Monk, Sun Wukong might need to get some keys and kill some snakes in his way.

The palace can be described as a matrix of characters. Each character stands for a room. In the matrix, 'K' represents the original position of Sun Wukong, 'T' represents the location of Tang Monk and 'S' stands for a room with a snake in it. Please note that there are only one 'K' and one 'T', and at most five snakes in the palace. And, '.' means a clear room as well '#' means a deadly room which Sun Wukong couldn't get in.

There may be some keys of different kinds scattered in the rooms, but there is at most one key in one room. There are at most 9 kinds of keys. A room with a key in it is represented by a digit(from '1' to '9'). For example, '1' means a room with a first kind key, '2' means a room with a second kind key, '3' means a room with a third kind key... etc. To save Tang Monk, Sun Wukong must get ALL kinds of keys(in other words, at least one key for each kind).

For each step, Sun Wukong could move to the adjacent rooms(except deadly rooms) in 4 directions(north, west, south and east), and each step took him one minute. If he entered a room in which a living snake stayed, he must kill the snake. Killing a snake also took one minute. If Sun Wukong entered a room where there is a key of kind N, Sun would get that key if and only if he had already got keys of kind 1,kind 2 ... and kind N-1. In other words, Sun Wukong must get a key of kind N before he could get a key of kind N+1 (N>=1). If Sun Wukong got all keys he needed and entered the room in which Tang Monk was cuffed, the rescue mission is completed. If Sun Wukong didn't get enough keys, he still could pass through Tang Monk's room. Since Sun Wukong was a impatient monkey, he wanted to save Tang Monk as quickly as possible. Please figure out the minimum time Sun Wukong needed to rescue Tang Monk. ? Input There are several test cases.

For each case, the first line includes two integers N and M(0 < N <= 100, 0<=M<=9), meaning that the palace is a N×N matrix and Sun Wukong needed M kinds of keys(kind 1, kind 2, ... kind M).?

Then the N × N matrix follows.

The input ends with N = 0 and M = 0. ? Output For each test case, print the minimum time (in minutes) Sun Wukong needed to save Tang Monk. If it's impossible for Sun Wukong to complete the mission, print "impossible"(no quotes). ? Sample Input 3 1 K.S ##1 1#T 3 1 K#T .S# 1#. 3 2 K#T .S. 21. 0 0 ? Sample Output 5 impossible 8 題意:要從K走到T處,并且要先收集k把鑰匙,收集鑰匙順序遞增,即拿到第一把鑰匙才能拿到第二把鑰匙,還有不超過五條蛇(之前沒看到這里只有五條不會做),每次打蛇要+1s,蛇死了再路過是不用打的。 思路:只有五條蛇,給蛇編號然后狀壓記錄打的蛇的狀態。剩下的就BFS。一開始用的優先隊列,不過超時了。要注意vis數組記錄狀態的技巧!!! 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <iostream> 5 #include <queue> 6 using namespace std; 7 #define N 105 8 #define INF 0x3f3f3f3f 9 10 struct node 11 { 12 int x, y, t, key, snake; 13 node() {} 14 node(int x, int y, int t, int key, int snake) : x(x), y(y), t(t), key(key), snake(snake) {} 15 }; 16 bool vis[N][N][10][40]; 17 int n, m, sx, sy, ex, ey; 18 int dx[] = {1, -1, 0, 0}, dy[] = {0, 0, 1, -1}; 19 char maze[N][N]; 20 21 bool check(int x, int y) 22 { 23 if(0<=x&&x<n&&0<=y&&y<n&&maze[x][y]!='#') return true; 24 return false; 25 } 26 27 void bfs() 28 { 29 int ans = INF; 30 memset(vis, 0, sizeof(vis)); 31 queue<node> que; 32 while(!que.empty()) que.pop(); 33 que.push(node(sx, sy, 0, 0, 0)); 34 while(!que.empty()) { 35 node top = que.front(); que.pop(); 36 int x = top.x, y = top.y, key = top.key, snake = top.snake, t = top.t; 37 if(key == m && maze[x][y] == 'T') { 38 ans = min(ans, t); 39 } 40 if(vis[x][y][key][snake] != 0) continue; 41 vis[x][y][key][snake] = 1; 42 for(int i = 0; i < 4; i++) { 43 int nx = x + dx[i], ny = y + dy[i]; 44 if(!check(nx, ny)) continue; 45 node now = top; 46 if('A' <= maze[nx][ny] && maze[nx][ny] <= 'G') { 47 //只有五條蛇,不能寫 <= 'Z' 48 int s = maze[nx][ny] - 'A'; 49 if((1<<s) & now.snake) ; //如果蛇被打了 50 else { 51 now.snake |= (1<<s); //沒被打 52 now.t++; 53 } 54 } else if(maze[nx][ny] - '0' == now.key + 1) { 55 now.key++; 56 } 57 now.t++; 58 que.push(node(nx, ny, now.t, now.key, now.snake)); 59 } 60 } 61 if(ans != INF) printf("%d\n", ans); 62 else printf("impossible\n"); 63 } 64 65 int main() 66 { 67 while(~scanf("%d%d", &n, &m), n+m) { 68 int cnt = 0; 69 for(int i = 0; i < n; i++) { 70 scanf("%s", maze[i]); 71 } 72 for(int i = 0; i < n; i++) { 73 for(int j = 0; j < n; j++) { 74 if(maze[i][j] == 'K') sx = i, sy = j; 75 if(maze[i][j] == 'S') {maze[i][j] = cnt+'A'; cnt++;} 76 } 77 } 78 bfs(); 79 } 80 return 0; 81 } 82 83 /* 84 4 2 85 KS1. 86 2SS. 87 SSSS 88 STSS 89 0 0 90 */

?

轉載于:https://www.cnblogs.com/fightfordream/p/5764470.html

總結

以上是生活随笔為你收集整理的HDU 5025:Saving Tang Monk(BFS + 状压)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 青草视频免费在线观看 | 国产成人精品一区二区三区无码熬 | 91香蕉国产在线观看 | 日韩黄色高清视频 | 欧美性生交大片免费看 | 欧洲亚洲视频 | 51成人做爰www免费看网站 | 日韩免费av在线 | 超碰人人干人人 | 欧美国产一区二区 | 日韩影视一区 | 亚洲色图35p | 午夜在线视频免费 | 免费观看在线视频 | 日本免费一区二区在线 | 国产性生活片 | 黄色大视频 | 午夜精品福利影院 | 亚洲天堂三级 | 91岛国| 亚洲欧美成人综合 | 欧美精品一区二区在线观看 | 爱福利视频广场 | 亚洲一区二区三区免费在线观看 | 欧美国产在线看 | 久草福利资源 | 天天操夜夜撸 | 欧美亚洲韩国 | sese在线视频 | 中文字幕免费播放 | 欧美 日韩 国产 一区 | 美女四肢被绑在床扒衣 | 一级精品视频 | 国产91精品一区二区麻豆亚洲 | 呦呦色 | 嫩草免费视频 | 欧美黑人又粗又大高潮喷水 | 久久精品视频日本 | 超碰五月天 | 久草福利资源在线观看 | 亚洲国产免费视频 | 久草热线 | 成人av在线网 | 少妇在线视频 | 久久蜜臀 | 99r精品视频 | 国产精品美女一区二区三区 | 不卡一区在线观看 | 综合精品久久 | 午夜精品999 | 亚洲图片欧美在线看 | 欧美久久久久久久久久久久 | 色天天| 日本一区二区不卡在线观看 | 黄色片中文字幕 | 日韩高清影视在线观看 | 欧美性受黑人性爽 | 漂亮少妇高潮午夜精品 | 精品国偷自产在线 | 亚洲成年人网站在线观看 | 美女日批视频在线观看 | 亚洲卡一 | 欧美看片| 亚洲va久久久噜噜噜久久天堂 | 少妇资源 | 黄色一级片网站 | 极品久久久久 | aaa黄色片| 蜜臀久久99精品久久久久宅男 | 青草青青视频 | 波多野结衣二区三区 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 国产精品白嫩极品美女视频 | 国产成人精品一区二区在线观看 | 看了下面会湿的视频 | 污污视频网站在线 | 特级毛片www | 伊人精品国产 | 日本一本在线视频 | 久久久久久亚洲中文字幕无码 | 日本三级播放 | 人妻在客厅被c的呻吟 | 日韩欧美成人一区二区三区 | 日本少妇ⅹxxxxx视频 | 亚洲天堂av在线免费观看 | 日本一区二区视频在线 | 草草在线观看视频 | xfplay5566色资源网站 | av毛片在线免费观看 | 26uuu精品一区二区在线观看 | www.四虎影视.com | 青青草五月天 | 人人叉人人 | 韩国日本在线 | 日本狠狠干 | 男女猛烈无遮挡免费视频 | 色屁屁www影院免费观看入口 | www毛片com | 四虎影库永久在线 |