70分,求调
  • 板块P1443 马的遍历
  • 楼主KangX
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/6/25 22:29
  • 上次更新2024/6/25 22:54:14
查看原帖
70分,求调
1377797
KangX楼主2024/6/25 22:29

WA #3 #7 #9

#include<iostream>
#include<queue>
#include<cstdio>
using namespace std;
struct kx{
	int a,b,t;
}h;
queue<kx> q;
int n,m,x,y,a[401][401];
int main(){
	cin>>n>>m>>x>>y;
	h.a=x;
	h.b=y;
	q.push(h);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			a[i][j]=-1;
		}
	}
	a[x][y]=0;
	h.t=0;
	while(!q.empty()){
		kx l=q.front();
		q.pop();
		if(l.a-2>0&&l.b-1>0&&a[l.a-2][l.b-1]==-1){
			a[l.a-2][l.b-1]=l.t+1;
			kx r;
			r.a=l.a-2;
			r.b=l.b-1;
			r.t=l.t+1;
			q.push(r);
		}
		if(l.a-1>0&&l.b-2>0&&a[l.a-1][l.b-2]==-1){
			a[l.a-1][l.b-2]=l.t+1;
			kx r;
			r.a=l.a-1;
			r.b=l.b-2;
			r.t=l.t+1;
			q.push(r);
		}
		if(l.a+2<=n&&l.b+1<=m&&a[l.a+2][l.b+1]==-1){
			a[l.a+2][l.b+1]=l.t+1;
			kx r;
			r.a=l.a+2;
			r.b=l.b+1;
			r.t=l.t+1;
			q.push(r);
		}
		if(l.a+1<=n&&l.b+2<=m&&a[l.a+1][l.b+2]==-1){
			a[l.a+1][l.b+2]=l.t+1;
			kx r;
			r.a=l.a+1;
			r.b=l.b+2;
			r.t=l.t+1;
			q.push(r);
		}
		if(l.a-2>0&&l.b+1<=m&&a[l.a-2][l.b+1]==-1){
			a[l.a-2][l.b+1]=l.t+1;
			kx r;
			r.a=l.a-2;
			r.b=l.b+1;
			r.t=l.t+1;
			q.push(r);
		}
		if(l.a-1>0&&l.b+2<=m&&a[l.a-1][l.b+2]==-1){
			a[l.a-1][l.b+2]=l.t+1;
			kx r;
			r.a=l.a-1;
			r.b=l.b+2;
			q.push(r);
		}
		if(l.a+2<=n&&l.b-1>0&&a[l.a+2][l.b-1]==-1){
			a[l.a+2][l.b-1]=l.t+1;
			kx r;
			r.a=l.a+2;
			r.b=l.b-1;
			r.t=l.t+1;
			q.push(r);
		}
		if(l.a+1<=n&&l.b-2>0&&a[l.a+1][l.b-2]==-1){
			a[l.a+1][l.b-2]=l.t+1;
			kx r;
			r.a=l.a+1;
			r.b=l.b-2;
			r.t=l.t+1;
			q.push(r);
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			printf("%-5d",a[i][j]);
		}
		cout<<endl;
	}
	return 0;
}
2024/6/25 22:29
加载中...