宁搜都不搜是吧
查看原帖
宁搜都不搜是吧
439643
IOSwallet楼主2022/11/1 16:00

RT,本人代码如下:

#include <bits/stdc++.h>
using namespace std;
struct points{
	int x;
	int y;
	int times;
};
queue<points> q;
char mapp[1005][1005]={};
bool flag[1005][1005]={};
int x1,y3,x2,y2,n;
int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			cin>>mapp[i][j];
			if(mapp[i][j]=='1')flag[i][j]=false;
			else flag[i][j]=true;
		}
	}
	cin>>x1>>y3>>x2>>y2;
	q.push({x1,y3,1});
	flag[x1][y3]=false;
	while(!q.empty()){
		points work=q.front();
		if(work.x==x2&&work.y==y2)cout<<work.times;break;
		if(work.x>0&&flag[work.x-1][work.y]){
			q.push({work.x-1,work.y,work.times+1});
			flag[work.x-1][work.y]=false;
		}
		if(work.x<n-1&&flag[work.x+1][work.y]){
			q.push({work.x+1,work.y,work.times+1});
			flag[work.x+1][work.y]=false;
		}
		if(work.y>0&&flag[work.x][work.y-1]){
			q.push({work.x,work.y-1,work.times+1});
			flag[work.x][work.y-1]=false;
		}
		if(work.y<n-1&&flag[work.x][work.y+1]){
			q.push({work.x,work.y+1,work.times+1});
			flag[work.x][work.y+1]=false;
		}
//		cout<<"test\n";
		q.pop();
	}
//	cout<<q.front().times;
	return 0;
}

根本进不了while循环,求解。

可能有点不好读

附:本人尝试过,队列q中有值。

2022/11/1 16:00
加载中...