| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
跟风,52行ac灭哈#include <cstdio>
#include <cstring>
#define M 45
char map[M][M];
int w, h, sr, sc, er, ec, dr[4] = {0, 1, 0, -1}, dc[4] = {1, 0, -1, 0};
void gao(int d, int t) {
int r = sr, c = sc, s = 1;
while(r != er || c != ec) {
d = d + 4 - t;
while(map[r+dr[d%4]][c+dc[d%4]] == '#') d += t;
r += dr[d%4], c += dc[d%4], s++;
}
printf("%d ", s);
}
int valid(int r, int c) {return (r >= 0 && r < h && c >= 0 && c < w);}
void bfs() {
int qr[M*M], qc[M*M], v[M][M], d[M][M], h = 0, t = 0, r, c, x, y, i;
memset(v, 0, sizeof(v));
qr[t] = sr, qc[t] = sc, t++, v[sr][sc] = d[sr][sc] = 1;
while(h < t) {
r = qr[h], c = qc[h], h++;
if(r == er && c == ec) {
printf("%d\n", d[r][c]);
break;
}
for(i = 0; i < 4; i++)
if(valid(x=r+dr[i], y=c+dc[i]) && map[x][y] == '.' && !v[x][y])
qr[t] = x, qc[t] = y, t++, v[x][y] = 1, d[x][y] = d[r][c] + 1;
}
}
int main() {
int T, i, j, d;
scanf("%d", &T);
while(T--) {
scanf("%d%d", &w, &h);
for(i = 0; i < h; i++) {
scanf("%s", map[i]);
for(j = 0; j < w; j++)
if(map[i][j] == 'S')
sr = i, sc = j;
else if(map[i][j] == 'E')
er = i, ec = j, map[i][j] = '.';
}
if(sc == 0) d = 0;
if(sr == 0) d = 1;
if(sc == w - 1) d = 2;
if(sr == h - 1) d = 3;
gao(d, 1);
gao(d, -1);
bfs();
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator