宽搜求助
查看原帖
宽搜求助
86971
TRZ_2007楼主2020/7/8 10:26

Rt,样例没过,50pts。

#include <bits/stdc++.h>
using namespace std;

const int N = 109;

int dx[] = {1,1,2,2,2,2,-1,-1,-2,-2,-2,-2};
int dy[] = {-2,2,-2,-1,1,2,-2,2,-1,1,-2,2};
int n1,n2,m1,m2;

struct pp {
	int x,y,s;
}q[N * N];

int book[N][N];
int head,tail,flag;

void bfs(int x,int y) {
	memset(book,0,sizeof(book));
	head = tail = 1;
	q[tail++] = {1,1,0};
	book[1][1] = 1;
	while(head < tail) {
		pp h = q[head++];
		for(int i = 0;i < 12;i++) {
			int nx = h.x + dx[i];
			int ny = h.y + dy[i];
			if(nx < 1 || nx > 20 || ny < 1 || ny > 20) {
				continue;
			}
			if(book[nx][ny]) continue;
			if(nx == x && ny == y) {
				printf("%d\n",h.s + 1);
				return;
			}
			q[tail++] = {nx,ny,h.s + 1};
			book[nx][ny] = 1;
		}
	}
}

int main() {
	scanf("%d %d %d %d",&n1,&m1,&n2,&m2);
	bfs(n1,m2);
	bfs(n2,m2);
	return 0;
}
2020/7/8 10:26
加载中...