提交时间:2022-05-28 11:28:28

运行 ID: 1104

#include <bits/stdc++.h> using namespace std; int a[205][205]; int x,y,minn=2e5; int k[5]={-1,1,0,0},l[5]={0,0,-1,1}; int dfs(int s,int t){ for(int i=0;i<4;i++){ if(a[x+k[i]][y+l[i]]==3){ minn=min(minn,s+1); } else if(a[x+k[i]][y+l[i]]==1){ x+=k[i]; y+=l[i]; a[x][y]=0; dfs(s+1,t); x-=k[i]; y-=l[i]; a[x][y]=1; } else if(a[x+k[i]][y+l[i]]==2){ if(t>0){ x+=k[i]; y+=l[i]; a[x][y]=0; dfs(s+1,t-1); x-=k[i]; y-=l[i]; a[x][y]=1; } } } } int main(){ int n,m,t; char e; cin>>n>>m>>t; for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ cin>>e; switch(e){ case '#': a[i][j]=2; break; case '@': x=i; y=j; break; case '+': a[i][j]=3; break; case '*': a[i][j]=1; break; } } } dfs(0,t); if(minn==2e5){ cout<<-1; } else{ cout<<minn; } return 0; }