Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

跟风,52行ac灭哈

Posted by qddpx at 2012-08-16 12:02:51 on Problem 3083
#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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator