广度优先收索(P1443)

#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
struct point
{
	int x,y;
};
int sx=1,sy=1,ex,ey,m[1000][1000],b[1000][1000];
queue <point>t;
int main()
{
	int n,m2,v=0;cin>>n>>m2;
	cin>>sx>>sy;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m2;j++){
			m[i][j]=-1;
		}
	}
	point now,tmp;
	now.x=sx,now.y=sy,m[now.x][now.y]=0;
	t.push(now);
	int aa[8][2]={{1,2},{2,1},{-1,2},{2,-1},{1,-2},{-2,1},{-1,-2},{-2,-1}};
	while(t.size()!=0){
		now=t.front();
		t.pop();
		for(int i=0;i<8;i++){
			tmp.x=now.x+aa[i][0];
			tmp.y=now.y+aa[i][1];
			if(tmp.x>=1&&tmp.x<=n&&tmp.y>=1&&tmp.y<=m2&&m[tmp.x][tmp.y]==-1){
				m[tmp.x][tmp.y]=m[now.x][now.y]+1;
				t.push(tmp);
			}
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m2;j++){
			printf("%-5d",m[i][j]);
		}
		cout<<endl;
	}
	return 0;
}

  

posted @ 2020-10-23 21:11  慕舲-不再使用  阅读(182)  评论(0编辑  收藏  举报