【HDOJ】1180 诡异的楼梯

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

【HDOJ】1180 诡异的楼梯的相关文章

HDU 1180 诡异的楼梯 (DFS)

诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 6472    Accepted Submission(s): 1525 Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向. 比如下面的例子里,一开始楼梯在竖

HDU 1180——诡异的楼梯( BFS)

诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 8717    Accepted Submission(s): 2148 Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向. 比如下面的例子里,一开始楼梯在竖

HDU 1180 诡异的楼梯 (搜索)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1180 TLE n次.. 注意两点:1,S.T这三种位置是可以停留一秒的.即在没有路可走的时候可以停留一秒. 2, bfs宽搜应该使用优先队列, 并且vis标记加在将next节点push到队列中的时候. 然后就是奇偶判断什么的就可以了. 代码: 1 #define _CRT_SECURE_NO_WARNINGS 2 #include <functional> 3 #include <algor

hdu 1180 诡异的楼梯 (bfs)

诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 9360    Accepted Submission(s): 2309 Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向. 比如下面的例子里,一开始楼梯在竖

HDU 1180 诡异的楼梯(BFS)

诡异的楼梯 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向.比如下面的例子里,一开始楼梯在竖直方向,一分钟以后它移动到了水平方向,再过一分钟它又回到了竖直方向.Harry发现对他来说很难找到能使得他最快到达目的地的

hdu 1180诡异的楼梯(bfs)

诡异的楼梯 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Total Submission(s) : 49   Accepted Submission(s) : 20 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description Hogwarts正式开学以后,Harry发现在Hogwart

hdu 1180 诡异的楼梯 BFS 这题相当坑爹啊,需要注意几点

诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 9813    Accepted Submission(s): 2428 Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向. 比如下面的例子里,一开始楼梯在竖

杭电acm 1180 诡异的楼梯 BFS

诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 19334    Accepted Submission(s): 5048Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向. 比如下面的例子里,一开始楼梯在竖直

HDOJ/HDU 1180 诡异的楼梯(经典BFS-详解)

Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向. 比如下面的例子里,一开始楼梯在竖直方向,一分钟以后它移动到了水平方向,再过一分钟它又回到了竖直方向.Harry发现对他来说很难找到能使得他最快到达目的地的路线,这时Ron(Harry最好的朋友)告诉Harry正好有一个魔法道具可以帮助他寻找这样的路线,而那个魔法道具上的咒语,正是由你纂写的. Input 测试数据有多组,每组的表