[洛谷P1747]好奇怪的游戏

题目大意:有两匹马,马可以走"日",也可以像象走"田",求它走到(1,1)的步数。 

题解:bfs

卡点:边界判断成了可以走到(0,y)或(x,0) 

C++ Code:

#include<cstdio> 
#include<cstring>
using namespace std;
const int maxn=51;
int dx[12]={2,-2,2,-2,1,1,-1,-1,2,2,-2,-2};
int dy[12]={2,2,-2,-2,2,-2,2,-2,1,-1,1,-1};
int sx,sy,h,t;
int q[maxn*maxn+100][2],s[maxn][maxn];
bool cj(int x,int y){
	if (x<1||y<1||x>50||y>50)return true;
	if (s[x][y])return true;
	return false;
}
int bfs(int sx,int sy){
	if (sx==1&&sy==1)return 0;
	s[sx][sy]=1;
	q[t=1][h=0]=sx;q[1][1]=sy;
	while (h<t){
		int x=q[++h][0],y=q[h][1];
		for (int i=0;i<12;i++){
			int xx=x+dx[i],yy=y+dy[i];
			if (cj(xx,yy))continue;
			q[++t][0]=xx;q[t][1]=yy;
			s[xx][yy]=s[x][y]+1;
			if (xx==1&&yy==1)return s[1][1]-1;
		}
	}
	return 0;
}
int main(){
	scanf("%d%d",&sx,&sy);
	printf("%d
",bfs(sx,sy));
	memset(s,0,sizeof(s));
	scanf("%d%d",&sx,&sy);
	printf("%d
",bfs(sx,sy));
	return 0;
}
原文地址:https://www.cnblogs.com/Memory-of-winter/p/8168829.html