#include<bits/stdc++.h>
using namespace std;
char a[41][41];
int r, c;
int f[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}; // 四个方向;
struct Node //路径上的点,x,y为该点坐标,step为从起点到达该点所需的频数
{
int x, y, step;
};
int bfs(int x, int y)
{
a[x][y] = '#';
queue<Node> q;
q.push({x, y, 1});
while (!q.empty())
{
Node node = q.front();
q.pop();
if (node.x == r && node.y == c) return node.step;// 到达终点
for (int i = 0; i < 4; ++i) // 遍历四个方向
{
int tx = node.x + f[i][0];
int ty = node.y + f[i][1];
if (tx < 1 || tx > r || ty < 1 || ty >c || a[tx][ty] == '#') continue;
a[tx][ty] = '#';
q.push({tx, ty, node.step + 1});
}
}
return -1;
}
int main()
{
cin >> r >> c;
for (int i = 1; i <= r; i++)
for (int j = 1; j <= c; j++)
cin >> a[i][j];
cout << bfs(1, 1);
return 0;
}
/**************************************************************
Problem: 1432
User: wf9000
Language: C++
Result: Accepted
Time:26 ms
Memory:2080 kb
****************************************************************/