bfs求调
查看原帖
bfs求调
883803
Mason123456楼主2024/1/22 20:24

rt,总是 −1-1

#include <bits/stdc++.h>
using namespace std;
struct node{
	int x,y;
	int t;
	int s;
};
const int N = 1e3 + 3;
int a[N][N];
int v[N][N];
const int xx[4] = {0,0,1,-1}, yy[4] = {1,-1,0,0};
int c,k;
void bfs(){
	queue<node> q;
	q.push({1,1,0,0});
	v[1][1] = 0;
	while(!q.empty()){
		int dx = q.front().x;
		int dy = q.front().y;
		int st = max(0, q.front().t - 1);
		int sp = q.front().s + 1;
		q.pop();
		
		if(dx == c && dy == c){
			cout<<sp - 1;
			return;
		}
		for(int i = 0;i < 4;i++){
			int sx = dx + xx[i];
			int sy = dy + yy[i];
			
			if(sx < 1 || sx > c || sy < 1 || sy > c)	continue;
			if(v[sx][sy])								continue;
			if(a[sx][sy] == 1)							continue;
			if(a[sx][sy] == 2 && st == 0)				continue;
			if(v[sx][sy] >= st)							continue;
			
			if(a[sx][sy] == 3){
				st = k;
			}
			cout<<sx<<" "<<sy<<endl;
			v[sx][sy] = st;
			q.push({sx,sy,st,sp});
		}
	}
	cout<<-1;
}
int main(){
	cin>>c>>k;
	for(int i = 1;i <= c;i++){
		for(int j = 1;j <= c;j++){
			char r;
			cin>>r;
			if(r == '.'){
				a[i][j] = 0;
			}
			else if(r == '#'){
				a[i][j] = 1;
			}
			else if(r == 'X'){
				a[i][j] = 2;
			}
			else if(r == '%'){
				a[i][j] = 3;
			}
		}
	}
	bfs();
}
2024/1/22 20:24
加载中...