求调,玄关(样例没过)
查看原帖
求调,玄关(样例没过)
1360373
SmileFaintly楼主2024/5/25 21:44

我太蒟蒻了

#include<iostream>
#include<cstring>
using namespace std;

int n,m,xxx,yyy;
int vis[410][410];
struct node{
	int x,y,step;
}q[410410],p;

int dx[]={-1,-2,-2,-1,1,2,2,1};
int dy[]={2,1,-1,-2,-2,-1,1,2};

int bfs(int a,int b){
	q[1].x=xxx;
	q[1].y=yyy;
	q[1].step=0;
	int h=0,t=1;
	int mi=2147483647;
	vis[xxx][yyy]=1;
	while(h<t){
		p=q[++h];
		if(p.x==a&&p.y==b){
			mi=min(mi,p.step);
		}
		for(int i=0;i<7;i++){
			int xx=dx[i]+p.x;
			int yy=dy[i]+p.y;
			if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&!vis[xx][yy]){
				vis[xx][yy]=1;
				t++;
				q[t].x=xx;
				q[t].y=yy;
				q[t].step=p.step+1;
			}
		}
	}
	if(mi==2147483647)return -1;
	return mi;
}

int main(){
	cin>>n>>m>>xxx>>yyy;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			memset(vis,0,sizeof(vis));
			printf("%-5d",bfs(i,j));
		}
		cout<<'\n';
	}
	return 0;
}
2024/5/25 21:44
加载中...