0Pts求助(玄关)
查看原帖
0Pts求助(玄关)
1066617
_ACGODs_楼主2024/10/8 21:25
#include<bits/stdc++.h>
using namespace std;
struct xy{
	int x;
	int y;
};
queue<xy> q1,q2;
int x_1,y_1,x_2,y_2;
int a1[300][300]={};
int a2[300][300]={};
bool v1[300][300]={};
bool v2[300][300]={};
int dx[12]={-2,-1,1,2,2,2,2,1,-1,-2,2,-2};
int dy[12]={2,2,2,2,1,-1,-2,-2,-2,-2,1,-1};
void bfs1(int x,int y){
	bool flg=0;
	v1[x][y]=1;
	q1.push({x,y});
	while(q1.size()!=0){
		xy first=q1.front();
		q1.pop();
		for(int i=0;i<12;i++){
			int xto=first.x+dx[i];
			int yto=first.y+dy[i];
			if(!v1[xto][yto] && xto>=1 && xto<=500 && yto>=1 && yto<=500) q1.push({xto,yto}),v1[xto][yto]=1,a1[xto][yto]=a1[x][y]+1;
			if(xto==1 && yto==1){
				cout<<a1[xto][yto]<<endl;
				flg=1;
				break;
			}
		}if(flg) break;
	}	
}
void bfs2(int x,int y){
	bool flg=0;
	q2.push({x,y});
	v2[x][y]=1;
	while(q2.size()!=0){
		xy first=q2.front();
		q2.pop();
		for(int i=0;i<12;i++){
			int xto=first.x+dx[i];
			int yto=first.y+dy[i];
			if(!a2[xto][yto] && xto>=1 && xto<=500 && yto>=1 && yto<=500) q2.push({xto,yto}),a2[xto][yto]=1,a2[xto][yto]=a2[x][y]+1;
			if(xto==1 && yto==1){
				cout<<a2[xto][yto]<<endl;
				flg=1;
				break;
			}
		}if(flg) break;
	}	
}
int main(){
	cin>>x_1>>y_1>>x_2>>y_2;
	bfs1(x_1,y_1);
	bfs2(x_2,y_2);
	return 0;
}

菜QwQ

2024/10/8 21:25
加载中...