这题没把我弄疯了.一个小时写完,改了2个小时...题目给的数据太弱了,需要自己写一些数据来验证...在这里给大家提供些数据
题目
Maze
Time Limit: 2000MS |
|
Memory Limit: 65536K |
Total Submissions: 1205 |
|
Accepted: 399 |
Description
Acm, a treasure-explorer, is exploring again. This time he is in a special maze, in which there are some doors (at most 5 doors, represented by 'A', 'B', 'C', 'D', 'E' respectively). In order to find the treasure, Acm may need to open doors. However, to open a door he needs to find all the door's keys (at least one) in the maze first. For example, if there are 3 keys of Door A, to open the door he should find all the 3 keys first (that's three 'a's which denote the keys of 'A' in the maze). Now make a program to tell Acm whether he can find the treasure or not. Notice that Acm can only go up, down, left and right in the maze.
Input
The input consists of multiple test cases. The first line of each test case contains two integers M and N (1 < N, M < 20), which denote the size of the maze. The next M lines give the maze layout, with each line containing N characters. A character is one of the following: 'X' (a block of wall, which the explorer cannot enter), '.' (an empty block), 'S' (the start point of Acm), 'G' (the position of treasure), 'A', 'B', 'C', 'D', 'E' (the doors), 'a', 'b', 'c', 'd', 'e' (the keys of the doors). The input is terminated with two 0's. This test case should not be processed.
Output
For each test case, in one line output "YES" if Acm can find the treasure, or "NO" otherwise.
Sample Input
4 4
S.X.
a.X.
..XG
....
3 4
S.Xa
.aXB
b.AG
0 0
Sample Output
YES
NO
数据:
5 5
S....
XXAXa
GX..X
.X...
.....
20 20
S..................a
aXXXXXXXXXXAXXXXXXX.
.X........bb......X.
.XbXXXXXXXXXXXXXX.X.
.X.X.....c......X.X.
aXbX.XXXXXXXXXX.X.X.
.X.X.X........X.X.X.
.X.X.X.XDXXXX.X.X.X.
.X.X.X.X..XXX.X.X.X.
.X.X.X.X.XG.X.X.X.X.
.X.XcX.X.XXEX.CeX.X.
.X.X.X.X.e..X.X.X.X.
.X.X.X.XXXXXX.X.X.X.
.X.X.X........X.X.X.
.X.X.XXXXXXXXXX.X.X.
.X.X..c.........X.X.
.X.XXXXXXXBXXXXXX.X.
.X........b.......X.
.XXXXXXXXXXXXXXXXXX.
.d..e...a........a..
主要思想,先找钥匙..搜索一遍,得到能找到的钥匙,然后开门.把能开的门都打开..打开门之后再找钥匙,然后在开门.
直到找到G..
代码如下:
Source Code
Problem: 2157 |
|
User: luoguangyao |
Memory: 276K |
|
Time: 0MS |
Language: C++ |
|
Result: Accepted |
- Source Code
1
#include <iostream>
2
3
using namespace std;
4
5
int m;
6
int n;
7
char map[22][22];
8
int allkey[6] =
{0};
9
int key[6] =
{0};
10
int mark[22][22] =
{0};
11
int mark2[22][22] =
{0};
12
int markkey[22][22] =
{0};
13
int lock = 1;
14
int kk = 0;
15
16
void FindKey(int x,int y)
17

{
18
if ((map[x][y] >= 'a'&& map[x][y] <= 'e')
19
&& markkey[x][y] != 1)
20
{
21
key[map[x][y] - 'a']++;
22
23
markkey[x][y] = 1;
24
}
25
26
mark2[x][y] = 1;
27
28
if (mark2[x + 1][y] != 1 && x + 1 < m && map[x + 1][y] != 'X' && map[x + 1][y] != 'A' && map[x + 1][y] != 'B'
29
&& map[x + 1][y] != 'C' && map[x + 1][y] != 'D' && map[x + 1][y] != 'E')
30
{
31
FindKey(x + 1 , y);
32
}
33
34
if (mark2[x - 1][y] != 1 && x - 1 >= 0 && map[x - 1][y] != 'X' && map[x - 1][y] != 'A' && map[x - 1][y] != 'B'
35
&& map[x - 1][y] != 'C' && map[x - 1][y] != 'D' && map[x - 1][y] != 'E')
36
{
37
FindKey(x - 1 , y);
38
}
39
40
if (mark2[x][y + 1] != 1 && y + 1 < n && map[x][y + 1] != 'X' && map[x][y + 1] != 'A' && map[x][y + 1] != 'B'
41
&& map[x][y + 1] != 'C' && map[x][y + 1] != 'D' && map[x][y + 1] != 'E' )
42
{
43
FindKey(x , y + 1);
44
}
45
46
if (mark2[x][y - 1] != 1 && y - 1 >= 0 && map[x][y - 1] != 'X' && map[x][y - 1] != 'A' && map[x][y - 1] != 'B'
47
&& map[x][y - 1] != 'C' && map[x][y - 1] != 'D' && map[x][y - 1] != 'E')
48
{
49
FindKey(x , y - 1);
50
}
51
}
52
53
void Findroute(int x,int y)
54

{
55
if (map[x][y] == 'G')
56
{
57
lock = 0;
58
}
59
60
FindKey(x , y);
61
62
mark[x][y] = 1;
63
64
if (mark[x + 1][y] != 1 && x + 1 < m && map[x + 1][y] != 'X')
65
{
66
if (map[x + 1][y] >= 'A' && map[x + 1][y] <= 'E')
67
{
68
if (key[map[x + 1][y] - 'A'] != 0 && allkey[map[x + 1][y] - 'A'] == key[map[x + 1][y] - 'A'])
69
{
70
Findroute(x + 1 , y);
71
}
72
}
73
else
74
{
75
Findroute(x + 1 , y);
76
}
77
}
78
79
if (mark[x - 1][y] != 1 && x - 1 >= 0 && map[x - 1][y] != 'X')
80
{
81
if (map[x - 1][y] >= 'A' && map[x - 1][y] <= 'E')
82
{
83
if (key[map[x - 1][y] - 'A'] != 0 && key[map[x - 1][y] - 'A'] == allkey[map[x - 1][y] - 'A'])
84
{
85
Findroute(x - 1 , y);
86
}
87
}
88
else
89
{
90
Findroute(x - 1 , y);
91
}
92
}
93
94
if (mark[x][y - 1] != 1 && y - 1 >= 0 && map[x][y - 1] != 'X')
95
{
96
if (map[x][y - 1] >= 'A' && map[x][y - 1] <= 'E')
97
{
98
if (key[map[x][y - 1] - 'A'] != 0 && allkey[map[x][y - 1] - 'A'] == key[map[x][y - 1] - 'A'])
99
{
100
Findroute(x , y - 1);
101
}
102
}
103
else
104
{
105
Findroute(x , y - 1);
106
}
107
}
108
109
if (mark[x][y + 1] != 1 && y + 1 < n && map[x][y + 1] != 'X')
110
{
111
if (map[x][y + 1] >= 'A' && map[x][y + 1] <= 'E')
112
{
113
if (key[map[x][y + 1] - 'A'] != 0 && allkey[map[x][y + 1] - 'A'] == key[map[x][y + 1] - 'A'])
114
{
115
Findroute(x , y + 1);
116
}
117
}
118
else
119
{
120
Findroute(x , y + 1);
121
}
122
}
123
124
}
125
126
int main()
127

{
128
int i;
129
int j;
130
131
while (cin >> m >> n)
132
{
133
int px = -1;
134
int py = -1;
135
int gx = -1;
136
int gy = -1;
137
138
memset(key,0,sizeof(key));
139
memset(allkey,0,sizeof(allkey));
140
memset(map,'\0',sizeof(map));
141
memset(mark,0,sizeof(mark));
142
memset(mark2,0,sizeof(mark2));
143
memset(markkey,0,sizeof(markkey));
144
lock = 1;
145
146
if (m == 0 && n == 0)
147
{
148
break;
149
}
150
151
for (i = 0; i < m ; ++i)
152
{
153
for (j = 0; j < n; ++j)
154
{
155
cin >> map[i][j];
156
157
if (map[i][j] >= 'a' && map[i][j] <= 'e')
158
{
159
allkey[map[i][j] - 'a']++;
160
}
161
162
if (map[i][j] == 'S')
163
{
164
px = i;
165
py = j;
166
}
167
168
if (map[i][j] == 'G')
169
{
170
gx = i;
171
gy = j;
172
}
173
}
174
}
175
176
if (px == -1 || py == -1 || gx == -1 || gy == -1)
177
{
178
cout << "NO" << endl;
179
continue;
180
}
181
182
Findroute(px,py);
183
184
if (lock == 1)
185
{
186
cout << "NO" << endl;
187
}
188
else
189
{
190
cout << "YES" << endl;
191
}
192
}
193
194
return 0;
195
}
196
posted on 2009-03-07 15:14
生活要低调 阅读(1231)
评论(0) 编辑 收藏 引用