大佬求改!!!!
查看原帖
大佬求改!!!!
1178818
BlackWuKong楼主2024/8/15 22:29
#include<bits/stdc++.h>
using namespace std;
int dx[15]={-2,-1,1,2,2,2,2,1,-1,-2,2,-2};
int	dy[15]={2,2,2,2,1,-1,-2,-2,-2,-2,1,-1};
int x1,y1,x2,y2,a[305][305],vis[305][305];
queue<int> q,p;
void bfs1(){
	a[1][1]=0;
	vis[1][1]=1;
	while (!q.empty()){
    	int xx=q.front(),yy=p.front();
    	q.pop(),p.pop();
    	for (int i=0;i<8;i++){
    		int u=xx+dx[i],v=yy+dy[i];
    		if (u>=1&&u<=x1&&v>=1&&v<=y1&&vis[u][v]==0){
    			a[u][v]=a[xx][yy]+1;
    		    vis[u][v]=1;
    		    q.push(u);
    		    p.push(v);
			}
			if (u==x1&&v==y1){
				cout<<a[u][v]<<"\n";
				return ;
			}
		}
	}
}
void bfs2(){
	a[1][1]=0;
	vis[1][1]=1;
	while (!q.empty()){
    	int xx=q.front(),yy=p.front();
    	q.pop(),p.pop();
    	for (int i=0;i<8;i++){
    		int u=xx+dx[i],v=yy+dy[i];
    		if (u>=1&&u<=x2&&v>=1&&v<=y2&&vis[u][v]==0){
    			a[u][v]=a[xx][yy]+1;
    		    vis[u][v]=1;
    		    q.push(u);
    		    p.push(v);
			}
			if (u==x2&&v==y2){
				cout<<a[u][v]<<"\n";
				return ;
			}
		}
	}
}
int main(){
    cin>>x1>>y1>>x2>>y2;
	bfs1();
	memset(a,-1,sizeof(a));
	memset(vis,0,sizeof(vis));
	bfs2();
	return 0;
}

2024/8/15 22:29
加载中...