【HDOJ】1175 连连看

BFS。wa了一下午,原来是YES,写成了Yes。


 1 #include <iostream>
2 #include <cstdio>
3 #include <cstring>
4 #include <queue>
5 using namespace std;
6
7 typedef struct node_st{
8 int x, y;
9 int dir;
10 int turn;
11 node_st() {}
12 node_st(int xx, int yy, int ddir, int tturn) {
13 x = xx; y = yy; dir = ddir; turn = tturn;
14 }
15 } node_st;
16
17 int map[1005][1005];
18 int n, m;
19 int dirs[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};
20 char turns[1005][1005];
21
22 bool bfs(int bx, int by, int ex, int ey) {
23 queue<node_st> que;
24 bool val = false;
25 node_st node;
26 int x, y, dir, turn;
27
28 memset(turns, 0, sizeof(turns));
29 turns[bx][by] = 1;
30 que.push(node_st(bx, by, -1, 0));
31
32 while ( !que.empty() ) {
33 node = que.front();
34 //printf("x=%d, y=%d, dir=%d, turn=%d\n", node.x, node.y, node.dir, node.turn);
35 if (node.x == ex && node.y == ey) {
36 val = true;
37 break;
38 }
39 que.pop();
40 for (int i=0; i<4; ++i) {
41 x = node.x + dirs[i][0];
42 y = node.y + dirs[i][1];
43 dir = i;
44 turn = node.turn;
45 if (x<1 || x>n || y<1 || y>m)
46 continue;
47 if (map[x][y] && (x!=ex || y!=ey))
48 continue;
49 if (dir!=node.dir && node.dir!=-1)
50 ++turn;
51 //printf("\tx=%d, y=%d, dir=%d, turn=%d\n", x, y, dir, turn);
52 if (turn > 2)
53 continue;
54 if (turns[x][y]==0 || turn+1 <= turns[x][y]) {
55 turns[x][y] = turn+1;
56 que.push(node_st(x, y, dir, turn));
57 }
58 }
59 }
60
61 return val;
62 }
63
64 int main() {
65 int q, x1, x2, y1, y2;
66 int i, j;
67
68 while (scanf("%d %d", &n, &m)!=EOF && (n||m)) {
69 for (i=1; i<=n; ++i)
70 for (j=1; j<=m; ++j)
71 scanf("%d", &map[i][j]);
72 scanf("%d", &q);
73 while (q--) {
74 scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
75 if (x1==x2 && y1==y2) {
76 printf("NO\n");
77 continue;
78 }
79 if (map[x1][y1]!=map[x2][y2] || map[x1][y1]==0 || map[x2][y2]==0) {
80 printf("NO\n");
81 continue;
82 }
83 if ( bfs(x1, y1, x2, y2) )
84 printf("YES\n");
85 else
86 printf("NO\n");
87 }
88 }
89
90 return 0;
91 }

【HDOJ】1175 连连看,布布扣,bubuko.com

时间: 2024-08-07 08:47:07

【HDOJ】1175 连连看的相关文章

HDOJ 1175 连连看

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1175 连连看 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 21470    Accepted Submission(s): 5331 Problem Description "连连看"相信很多人都玩过.没玩过也没关系,下面

hdu 1175 连连看(模拟循环队列)

连连看 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 18149    Accepted Submission(s): 4741 Problem Description "连连看"相信很多人都玩过.没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子.如果某两个相同的棋子,可以通过一条线连起来(这条

HDU - 1175 连连看 DFS (记录方向)

连连看HDU - 1175 "连连看"相信很多人都玩过.没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子.如果某两个相同的棋子,可以通过一条线连起来(这条线不能经过其它棋子),而且线的转折次数不超过两次,那么这两个棋子就可以在棋盘上消去.不好意思,由于我以前没有玩过连连看,咨询了同学的意见,连线不能从外面绕过去的,但事实上这是错的.现在已经酿成大祸,就只能将错就错了,连线不能从外围绕过. 玩家鼠标先后点击两块棋子,试图将他们消去,然后游戏的后台判断这两个方格能

hdu 1175 连连看 (深搜)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1175 题目大意:如果某两个相同的棋子,可以通过一条线连起来(这条线不能经过其它棋子)这样的两个棋子可以消掉.还有一个要注意的地方的就是转弯.转弯的次数不超过两次,这两个棋子才可以在棋盘上消去~ 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 int

【dfs】hdu 1175 连连看

[dfs]hdu 1175 连连看 题目链接:hdu 1175 连连看 题目大意 连连看,问能否成功? 题意很简单,就是我们平时玩的连连看的游戏规则,貌似dfs和bfs都能做,笔者就做了个dfs(好想),超时了好几次,原因是dfs(int d)与终点的d重载矛盾了,所以还是要小心. 说一下思路 神器的剪枝:if(t==2&&x!=c&&y!=d) return;这一部剪枝妙笔回春,9000+MS优化到100+MS啊:如果转了2次,但是目标与当前位置不在同一行或同一列就不满足

HDU 1175 连连看(DFS)

Problem Description “连连看”相信很多人都玩过.没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子.如果某两个相同的棋子,可以通过一条线连起来(这条线不能经过其它棋子),而且线的转折次数不超过两次,那么这两个棋子就可以在棋盘上消去.不好意思,由于我以前没有玩过连连看,咨询了同学的意见,连线不能从外面绕过去的,但事实上这是错的.现在已经酿成大祸,就只能将错就错了,连线不能从外围绕过.玩家鼠标先后点击两块棋子,试图将他们消去,然后游戏的后台判断这两个方格能

杭电 HDU ACM 1175 连连看(麻烦的bfs)

连连看 Time Limit:10000MS    Memory Limit:32768KB    64bit IO Format:%I64d & %I64u SubmitStatusPracticeHDU 1175 Description "连连看"相信很多人都玩过.没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子.如果某两个相同的棋子,可以通过一条线连起来(这条线不能经过其它棋子),而且线的转折次数不超过两次,那么这两个棋子就可以在棋盘上消去.不好

HDU - 1175 连连看(带转弯的dfs)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1175 题意:代码模拟连连看(转弯数不能超过两次)并且不能绕外圈. 和前面几题大同小异,只不过要标记一下,因为连在一起的相当于这两个点没有了. 1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 5 int dx[4]={0,1,0,-1}; 6 int dy[4]={1,0,-1,0}; 7 int m

HDU 1175 连连看

连连看 Time Limit : 20000/10000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 114   Accepted Submission(s) : 29 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description “连连看”相信很多人都玩过.没玩过也没关系,下面我给大家介绍