为啥这样就对了?
查看原帖
为啥这样就对了?
1191031
majingxuan123楼主2024/5/23 11:53

之前代码:

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
struct node{
	int x,y;
	int w;
};
int n,k;
char s[1005][1005];
int d[1005][1005];
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
queue<node> q;
int bfs(){
	q.push({1,1,0});
	memset(d,-1,sizeof(d));
	d[1][1]=0;
	while(!q.empty()){
		node t=q.front();
		q.pop();
		if(t.x==n&&t.y==n)return d[n][n];
		for(int i=0;i<4;i++){
			int fx=t.x+dx[i];
			int fy=t.y+dy[i];
			if(fx<1||fy<1||fx>n||fy>n||s[fx][fy]=='#'||(s[fx][fy]=='X'&&t.w==0))continue;
			if(d[fx][fy]!=-1&&t.w>0||d[fx][fy]==-1){
				if(t.w>0)t.w--;
				if(s[fx][fy]=='%'){
					t.w=k;
					s[fx][fy]='.';
				}
				q.push({fx,fy,t.w});
				d[fx][fy]=d[t.x][t.y]+1; 
			}
		}	
	}
	return -1;
}
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>s[i][j];
		}
	}
	cout<<bfs();
	return 0;
} 

改后代码:

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
struct node{
	int x,y;
	int w;
};
int n,k;
char s[1005][1005];
int d[1005][1005];
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
queue<node> q;
int bfs(){
	q.push({1,1,0});
	memset(d,-1,sizeof(d));
	d[1][1]=0;
	while(!q.empty()){
		node t=q.front();
		q.pop();
		if(t.x==n&&t.y==n)return d[n][n];
		for(int i=0;i<4;i++){
			int fx=t.x+dx[i];
			int fy=t.y+dy[i];
			if(fx<1||fy<1||fx>n||fy>n||s[fx][fy]=='#'||(s[fx][fy]=='X'&&t.w==0))continue;
			if(d[fx][fy]!=-1&&t.w>0||d[fx][fy]==-1){
				int w=t.w;//不同点
				if(w>0)w--;//不同点
				if(s[fx][fy]=='%'){
					w=k;//不同点
					s[fx][fy]='.';
				}
				q.push({fx,fy,w});//不同点
				d[fx][fy]=d[t.x][t.y]+1; 
			}
		}	
	}
	return -1;
}
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>s[i][j];
		}
	}
	cout<<bfs();
	return 0;
} 
2024/5/23 11:53
加载中...