之前代码:
#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;
}