bfs+优先队列。wa了N次,才发现可以停留等待楼梯变换方向。
1 #include <iostream>
2 #include <queue>
3 #include <cstdio>
4 #include <cstring>
5 using namespace std;
6
7 #define MAXNUM 55
8
9 typedef struct node_st {
10 int x, y, t;
11 node_st() {}
12 node_st(int xx, int yy, int tt) {
13 x = xx; y = yy; t = tt;
14 }
15 friend bool operator < (node_st a, node_st b) {
16 return a.t > b.t;
17 }
18 } node_st;
19
20 char map[MAXNUM][MAXNUM];
21 char visit[MAXNUM][MAXNUM];
22 int n, m;
23 int begx, begy, endx, endy;
24 int direct[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
25
26 int bfs(int begx, int begy) {
27 priority_queue<node_st> que;
28 node_st node;
29 int i, x, y, nx, ny, t;
30
31 que.push(node_st(begx, begy, 0));
32 memset(visit, 0, sizeof(visit));
33 visit[begx][begy] = 1;
34
35 while ( !que.empty() ) {
36 node = que.top();
37 if (map[node.x][node.y] == ‘T‘) {
38 return node.t;
39 }
40 que.pop();
41 for (i=0; i<4; ++i) {
42 x = node.x + direct[i][0];
43 y = node.y + direct[i][1];
44 if (x<0 || x>=n || y<0 || y>=m)
45 continue;
46 if (visit[x][y] || map[x][y] == ‘*‘)
47 continue;
48 if (map[x][y] == ‘.‘ || map[x][y]==‘T‘) {
49 que.push(node_st(x,y,node.t+1));
50 visit[x][y] = 1;
51 continue;
52 }
53 if (map[x][y]==‘|‘ || map[x][y]==‘-‘) {
54 nx = x + direct[i][0];
55 ny = y + direct[i][1];
56 t = node.t + 1;
57 if (nx<0 || nx>=n || ny<0 || ny>=m)
58 continue;
59 if (visit[nx][ny] || map[nx][ny]==‘*‘)
60 continue;
61 if ( ((map[x][y]==‘|‘) && ((node.t&1)==0) && (i==2||i==3)) ||
62 ((map[x][y]==‘|‘) && ((node.t&1)!=0) && (i==0||i==1)) ||
63 ((map[x][y]==‘-‘) && ((node.t&1)==0) && (i==0||i==1)) ||
64 ((map[x][y]==‘-‘) && ((node.t&1)!=0) && (i==2||i==3)) )
65 ++t;
66 visit[nx][ny] = 1;
67 que.push(node_st(nx, ny, t));
68 }
69 }
70 }
71
72 return -1;
73 }
74
75 int main() {
76 int i, j;
77
78 while (scanf("%d %d%*c",&n,&m) != EOF) {
79 for (i=0; i<n; ++i) {
80 scanf("%s", map[i]);
81 for (j=0; j<m; ++j) {
82 if (map[i][j] == ‘S‘) {
83 begx = i;
84 begy = j;
85 }
86 }
87 }
88 i = bfs(begx, begy);
89 printf("%d\n", i);
90 }
91
92 return 0;
93 }
【HDOJ】1180 诡异的楼梯,布布扣,bubuko.com
时间: 2024-10-24 23:41:45