第二个点为什么会错
查看原帖
第二个点为什么会错
672360
Ch35楼主2022/6/5 20:25
#include<bits/stdc++.h>
using namespace std;
int st_x1,st_y1,st_x2,st_y2,x,y,b[100][100],bs[100][100],bb[100][100],bss[100][100];
queue<int>xx;
queue<int>yy;
queue<int>xxx;
queue<int>yyy;
int main(){
	cin>>st_x1>>st_y1>>st_x2>>st_y2;
	xx.push(st_x1),yy.push(st_y1);
	b[st_x1][st_y1]=1;
	while(1){
	    x=xx.front(),y=yy.front();
	    if(x-2>0&&y-2>0&&b[x-2][y-2]==0)xx.push(x-2),yy.push(y-2),b[x-2][y-2]=1,bs[x-2][y-2]=bs[x][y]+1;
	    if(x-2>0&&b[x-2][y+2]==0)xx.push(x-2),yy.push(y+2),b[x-2][y+2]=1,bs[x-2][y+2]=bs[x][y]+1;
	    if(y-2>0&&b[x+2][y-2]==0)xx.push(x+2),yy.push(y-2),b[x+2][y-2]=1,bs[x+2][y-2]=bs[x][y]+1;
	    if(b[x+2][y+2]==0)xx.push(x+2),yy.push(y+2),b[x+2][y+2]=1,bs[x+2][y+2]=bs[x][y]+1;
	    if(x-2>0&&y-1>0&&b[x-2][y-1]==0)xx.push(x-2),yy.push(y-1),b[x-2][y-1]=1,bs[x-2][y-1]=bs[x][y]+1;
	    if(x-2>0&&b[x-2][y+1]==0)xx.push(x-2),yy.push(y+1),b[x-2][y+1]=1,bs[x-2][y+1]=bs[x][y]+1;
	    if(x-1>0&&y-2>0&&b[x-1][y-2]==0)xx.push(x-1),yy.push(y-2),b[x-1][y-2]=1,bs[x-1][y-2]=bs[x][y]+1;
	    if(y-2>0&&b[x+1][y-2]==0)xx.push(x+1),yy.push(y-2),b[x+1][y-2]=1,bs[x+1][y-2]=bs[x][y]+1;
	    if(x-1>0&&b[x-1][y+2]==0)xx.push(x-1),yy.push(y+2),b[x-1][y+2]=1,bs[x-1][y+2]=bs[x][y]+1;
	    if(b[x+2][y+1]==0)xx.push(x+2),yy.push(y+1),b[x+2][y+1]=1,bs[x+2][y+1]=bs[x][y]+1;
	    xx.pop(),yy.pop();
	    if(x==1&&y==1)break;
    }
    cout<<bs[1][1]<<endl;
    xxx.push(st_x2),yyy.push(st_y2);
	bb[st_x2][st_y2]=1;
    while(1){
	    x=xxx.front(),y=yyy.front();
	    if(x-2>0&&y-2>0&&bb[x-2][y-2]==0)xxx.push(x-2),yyy.push(y-2),bb[x-2][y-2]=1,bss[x-2][y-2]=bss[x][y]+1;
	    if(x-2>0&&bb[x-2][y+2]==0)xxx.push(x-2),yyy.push(y+2),bb[x-2][y+2]=1,bss[x-2][y+2]=bss[x][y]+1;
	    if(y-2>0&&bb[x+2][y-2]==0)xxx.push(x+2),yyy.push(y-2),bb[x+2][y-2]=1,bss[x+2][y-2]=bss[x][y]+1;
	    if(bb[x+2][y+2]==0)xxx.push(x+2),yyy.push(y+2),bb[x+2][y+2]=1,bss[x+2][y+2]=bss[x][y]+1;
	    if(x-2>0&&y-1>0&&bb[x-2][y-1]==0)xxx.push(x-2),yyy.push(y-1),bb[x-2][y-1]=1,bss[x-2][y-1]=bss[x][y]+1;
	    if(x-2>0&&bb[x-2][y+1]==0)xxx.push(x-2),yyy.push(y+1),bb[x-2][y+1]=1,bss[x-2][y+1]=bss[x][y]+1;
	    if(x-1>0&&y-2>0&&bb[x-1][y-2]==0)xxx.push(x-1),yyy.push(y-2),bb[x-1][y-2]=1,bss[x-1][y-2]=bss[x][y]+1;
	    if(y-2>0&&bb[x+1][y-2]==0)xxx.push(x+1),yyy.push(y-2),bb[x+1][y-2]=1,bss[x+1][y-2]=bss[x][y]+1;
	    if(x-1>0&&bb[x-1][y+2]==0)xxx.push(x-1),yyy.push(y+2),bb[x-1][y+2]=1,bss[x-1][y+2]=bss[x][y]+1;
	    if(bb[x+2][y+1]==0)xxx.push(x+2),yyy.push(y+1),bb[x+2][y+1]=1,bss[x+2][y+1]=bss[x][y]+1;
	    xxx.pop(),yyy.pop();
	    if(x==1&&y==1)break;
    }
    cout<<bss[1][1];
	return 0;
}

输入:

1 2
2 1

答案:

2
2

输出:

2
3
01234
12(终点)0(黑马)
2
31
4
01234
12(终点)
20(白马)
3
4
2022/6/5 20:25
加载中...