救救孩纸吧
查看原帖
救救孩纸吧
297831
idgg007楼主2021/4/9 22:57
#include<cstdio>
int M, N, QueMax, *MX = new int, *MY = new int, dx[100], dy[100], NumberOfD;
bool flag[2001][2001];
char home;
void BFS() {
	int *QueueX = new int[QueMax], *QueueY = new int[QueMax];
	int *QueueAns = new int[QueMax];
	int *head = new int, *tale = new int;
	*head = 0;
	*tale = 0;
	*(QueueX + *tale) = *MX;
	*(QueueAns + *tale) = 0;
	*(QueueY + *tale) = *MY;
	flag[*MX][*MY] = 1;
	delete MX;
	delete MY;
	while (*head <= *tale) {
		for (int i = -1; i <= 1; i++) {
			for (int j = 0; j < NumberOfD; j++) {
				if (dx[j] == *(QueueX + *head) + i && dy[j] == *(QueueY + *head)) {
					printf("%d", *(QueueAns + *head) + 1);
					return;
				}
			}
			if (flag[*(QueueX + *head) + i][*(QueueY + *head)] == 0
			        && *(QueueX + *head) + i >= 0
			        && *(QueueX + *head) + i < N) {
				flag[*(QueueX + *head) + i][*(QueueY + *head)] = 1;
				*tale += 1;
				*(QueueX + *tale) = *(QueueX + *head) + i;
				*(QueueY + *tale) = *(QueueY + *head);
				*(QueueAns + *tale) = *(QueueAns + *head) + 1;
			}
		}
		for (int i = -1; i <= 1; i++) {
			for (int j = 0; j < NumberOfD; j++) {
				if (dx[j] == *(QueueX + *head) && dy[j] == *(QueueY + *head) + i) {
					printf("%d", *(QueueAns + *head) + 1);
					return;
				}
			}
			if (flag[*(QueueX + *head)][*(QueueY + *head) + i] == 0
			        && *(QueueY + *head) + i >= 0
			        && *(QueueY + *head) + i < M) {
				flag[*(QueueX + *head)][*(QueueY + *head) + i] = 1;
				*tale += 1;
				*(QueueX + *tale) = *(QueueX + *head);
				*(QueueY + *tale) = *(QueueY + *head) + i;
				*(QueueAns + *tale) = *(QueueAns + *head) + 1;
			}
		}
		*head += 1;
	}
	printf("No Way!");
}
int main() {
	freopen("in.txt","r",stdin);
	freopen("out.txt","w",stdout);
	scanf("%d%d", &N, &M);
	QueMax = N * M;
	getchar();
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < M; j++) {
			scanf("%c", &home);
			if (home == 'm') {
				*MX = i;
				*MY = j;
			}
			if (home == '#') {
				flag[i][j] = 1;
				QueMax--;
			}
			if (home == 'd') {
				dx[NumberOfD] = i;
				dy[NumberOfD++] = j;
			}
		}
		getchar();
	}
	BFS();
	fclose(stdin);
	fclose(stdout);
	return 0;
}

20分,但和题解对拍了20来分钟了,仍然没断

2021/4/9 22:57
加载中...