我的代码:
#include<bits/stdc++.h>
using namespace std;
const int N=205;
char mp[N][N];
int dx[5]={0,0,-1,1},dy[5]={1,-1,0,0},vis[N][N];
struct node{
int x,y,k,t;
};
int main(){
int n,m,k,sx,sy;
while(cin>>n>>m>>k){
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
cin>>mp[i][j];vis[i][j]=0;
if(mp[i][j]=='@') sx=i,sy=j;
}
queue<node>q;
q.push(node{sx,sy,k,0});
vis[sx][sy]=1;
int f=0;
while(q.size()){
node now=q.front();
q.pop();
int nowx=now.x,nowy=now.y,nowk=now.k,nowt=now.t;
for(int i=0;i<4;i++){
int xx=nowx+dx[i],yy=nowy+dy[i];
if(vis[xx][yy]) continue;
if(xx<1||xx>n||yy<1||yy>m) continue;
if(mp[xx][yy]=='*')
vis[xx][yy]=1,q.push(node{xx,yy,nowk,nowt+1});
else if(mp[xx][yy]=='+'){
cout<<nowt+1<<endl;
f=1;
break;
}
else if(mp[xx][yy]=='#')
if(nowk) vis[xx][yy]=1,q.push(node{xx,yy,nowk-1,nowt+1});
}
if(f) break;
}
if(!f) cout<<-1<<endl;
}
return 0;
}