标签:
http://acm.hdu.edu.cn/showproblem.php?pid=5025
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 */
HDU 5025:Saving Tang Monk(BFS + 状压)
标签:
原文地址:http://www.cnblogs.com/fightfordream/p/5764470.html