MLE40分求助
查看原帖
MLE40分求助
1028304
wyx392714楼主2024/3/9 14:14
#include<bits/stdc++.h>
using namespace std;
int N,K;
int vis[1005][1005];
char s[1005][1005];
int nx[4] = {1,0,-1,0};
int ny[4] = {0,1,0,-1};

struct Node{
	int x;
	int y;
	int step;
	int magic;
};
bool l=0;
void bfs(){
	vis[1][1] = 0;
	queue <Node> q;
	Node node = {1,1,0,0};
	q.push(node);
	while(q.size()){
		node = q.front();q.pop();
		if(node.x==N&&node.y==N){
			cout << node.step;
			l = 1;
			return;
		}
		for(int i=0;i<4;i++){
			int xx = node.x+nx[i];
			int yy = node.y+ny[i];
			if(s[xx][yy]=='X'&&node.magic==0) continue;
			int magic = max(0,node.magic-1);
			if(s[xx][yy]=='%') magic = K;
			if(xx<1||xx>N||yy<1||yy>N||s[xx][yy]=='#'||vis[xx][yy]>magic) continue;
			vis[xx][yy] = magic;
			Node node2 = {xx,yy,node.step+1,magic};
			q.push(node2);
		}
	}
}

int main(){
	cin >> N >> K;
	for(int i=1;i<=N;i++){
		for(int j=1;j<=N;j++){
			cin >> s[i][j];
		}
	}
	memset(vis,0,sizeof(vis));
	bfs();
	if(l==0) cout << "-1";
	return 0;
}
2024/3/9 14:14
加载中...