pku2243马棋到达最短路解题报告

八个方向访问的bfs模板:

#include<cstdio>
#include<queue>
using namespace std;

int map[8][8];
bool flag[8][8];
int xs,xe,ys,ye;起点和终点
int vis[8][2]={{-1,-2},{1,-2},{-2,-1},{2,-1},{-2,1},{2,1},{-1,2},{1,2}};

struct node
{
	int x,y,step;
};

int bfs()
{
	queue<node>q;
	node frist;frist.step=0;frist.x=xs;frist.y=ys;
	q.push(frist);
	flag[xs][ys]=true;
	while(!q.empty())
	{
		node pre=q.front();q.pop();
		if(pre.x==xe && pre.y==ye)
			return pre.step;

		for(int i=0;i<8;i++)
		{
			node pp;
			pp.x=pre.x+vis[i][0];pp.y=pre.y+vis[i][1];
			if(!flag[pp.x][pp.y] && pp.x>=0 && pp.x<8 && pp.y>=0 && pp.y<8)
			{
				flag[pp.x][pp.y]=true;
				pp.step=pre.step+1;
				q.push(pp);
			}
		}
	}
	return 0;
}

int main()
{
	char c1[2],c2[2];
	while(~scanf("%s%s",c1,c2))
	{
		memset(flag,false,sizeof(flag));
		xs=c1[0]-'a';ys=c1[1]-'0'-1;//这里的数字坐标因为下标从0开始,要-1;
		xe=c2[0]-'a';ye=c2[1]-'0'-1;

		printf("To get from %s to %s takes %d knight moves.\n",c1,c2,bfs());
	}
	return 0;
}


你可能感兴趣的:(bfs)