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

运行 ID: 1106

#include <bits/stdc++.h> using namespace std; char a[201][201]; int minn=2e9; bool jl[201][201],f; int ckl[201][201]; int csc[201][201]; int xx[4]={1,-1,0,0},yy[4]={0,0,-1,1}; int n,m,sx,sy; void dfs(int x,int y,int t,int cs){ if(x<0||y<0||x>=m||y>=n) return ; if(jl[x][y]){ if(csc[x][y]==cs){ if(ckl[x][y]<t) ckl[x][y]=t; else return ; }else if(csc[x][y]>cs) csc[x][y]=cs; else return ; }else jl[x][y]=true; csc[x][y]=cs; if(a[x][y]=='#'){ if(t==0){ return ; }else{ t--; } } else if(a[x][y]=='+'){ if(minn>cs){ minn=cs; f=true; } return ; } for(int i=0;i<4;i++){ dfs(x+xx[i],y+yy[i],t,cs+1); } } int main(){ int t; cin>>m>>n>>t; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ cin>>a[i][j]; if(a[i][j]=='@'){ sx=i;sy=j; } } } dfs(sx,sy,t,0); if(!f){ minn=-1; } cout<<int(minn); return 0; }