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