bfs悬关求助
查看原帖
bfs悬关求助
881317
spessert楼主2024/3/29 13:24

感觉思路没什么问题,有大佬能指点一下吗555,感激不尽

#include<iostream>
#include<queue>
#include<iomanip>
using namespace std;
int n,m,x,y;
int mp[500][500]={0};  //地图 
bool vis[500][500];    //判断有没有走过该点 
int dirx[]={2,1,-1,-2,-2,-1,1,2}; //马走的8个方向 
int diry[]={1,2,2,1,-1,-2,-2,-1};
struct AXI{
	int x,y;
}ax;
queue<AXI> qu; 

bool judge(int x,int y){
	if(x<1||y<1||x>n||y>n){ //超出地图 
		return false;
	}
	if(vis[x][y]==true){  //已经走过该点 
		return false;
	}
	return true;
}

void BFS(int x,int y){
	ax.x=x; ax.y=y;
	qu.push(ax);
	int step=1;  //第几次搜索 

	while(!qu.empty()){
		int len=qu.size();
		while(len--){
			for(int i=0;i<8;i++){
			int tx=qu.front().x+dirx[i];
			int ty=qu.front().y+diry[i];
			if(judge(tx,ty)){ //判断有无超出边界,有无走过该点 
				ax.x=tx; ax.y=ty;
				qu.push(ax);
				mp[tx][ty]=step;
				vis[tx][ty]=true;
			}
		  }
		 qu.pop();
		}
		step++;
	}
}
int main(){
	cin>>n>>m>>x>>y;
	vis[x][y]=true; //初始化起始点 
	mp[x][y]=0;
	
	BFS(x,y);
	
	for(int i=1;i<=n;i++){ //输出 
		for(int j=1;j<=n;j++){
			if(vis[i][j]==false){ //马没走过的点输出-1 
				cout<<left<<setw(5)<<-1;
			}else{
				cout<<left<<setw(5)<<mp[i][j];
			}
			
		}
		cout<<endl;
	}
	return 0;
}
2024/3/29 13:24
加载中...