1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 using namespace std;
5 int r,c,f[100][100],minc=1000;
6 char a[100][100];
7 const int d[4][4]={{1,0},{0,1},{-1,0},{0,-1}};
8 void dfs(int x,int y,int cur){
9 if(x==r&&y==c) { if (cur<minc) minc=cur; return;}
10 for(int i=0;i<=3;i++){
11 int xx=x+d[i][0],yy=y+d[i][1];
12 if(a[xx][yy]&&!f[xx][yy]) {
13 f[xx][yy]=1;
14 dfs(xx,yy,cur+1);
15 f[xx][yy]=0;
16 }
17 }
18 }
19 int main(){
20 cin>>r>>c;
21 char ch;
22 memset(a,0,sizeof(a));//0代表不能通过,这样相当于在外圈加了一圈边界。
23 memset(f,0,sizeof(f));
24 for(int i=1;i<=r;i++)
25 for (int j=1;j<=c;j++){
26 cin>>ch;
27 if (ch=='.') a[i][j]=1;
28 }
29 f[1][1]=1;
30 dfs(1,1,1);
31 cout<<minc<<endl;
32 return 0;
33 }