#include<bits/stdc++.h>
using namespace std;
char Map[201][201];
int n,m,t,sx,sy,tx,ty,vis[201][201],ans=0x7fffffff;
int dx[8]={0,1,0,-1},dy[8]={1,0,-1,0};
struct node{
int x,y,step,t;
node(int xx,int yy,int dep,int tt){
x=xx;
y=yy;
step=dep;
t=tt;
}
node(){
}
};
queue<node> q;
void bfs(int x,int y)
{
vis[x][y]=1;
q.push(node(x,y,0,t));
while(!q.empty())
{
node now=q.front();
q.pop();
if(now.x==tx&&now.y==ty)
{
ans=min(ans,now.step);
continue;
}
for(int i=0;i<4;i++)
{
int Tx=now.x+dx[i],Ty=now.y+dy[i];
if(Tx<0||Tx>=n||Ty<0||Ty>=m||vis[Tx][Ty])
{
continue;
}
if(Map[Tx][Ty]=='#')
{
if(now.t>0)
{
vis[Tx][Ty]=1;
q.push(node(Tx,Ty,now.step+1,now.t-1));
}
else
{
continue;
}
}
else
{
vis[Tx][Ty]=1;
q.push(node(Tx,Ty,now.step+1,now.t));
}
}
}
return;
}
int main()
{
scanf("%d %d %d",&n,&m,&t);
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>Map[i][j];
if(Map[i][j]=='@')
{
sx=i;
sy=j;
}
if(Map[i][j]=='+')
{
tx=i;
ty=j;
}
}
}
bfs(sx,sy);
if(ans!=0x7fffffff)
cout<<ans<<"\n";
else
{
cout<<-1<<"\n";
}
}
求Debug