求大佬指点
#include <bits/stdc++.h>
using namespace std;
const int Maxn = 1e3 + 3;
int N,M;
int Dir_X[5] = {0,1,-1,0,0};
int Dir_Y[5] = {0,0,0,1,-1};
bool Vis[Maxn][Maxn];
bool Vis2[Maxn][Maxn];
char Box[Maxn][Maxn];
int Line_Num = 1;
bool F;
struct Line
{
int Start_X,Start_Y,End_X,End_Y;
}L[Maxn * Maxn];
int Sum = INT_MAX;
int Cont = 0;
void DFS(int X,int Y,int Cnt)
{
Cnt += 1;
for(int i = 1;i <= Line_Num;i++)
{
if(L[i].Start_X == X && L[i].Start_Y == Y && !Vis2[L[i].End_X][L[i].End_Y])
{
Vis2[L[i].End_X][L[i].End_Y] = true;
//cout << "----------------" << endl;
Cont++;
if(L[i].End_X == N)
{
F = true;
Sum = min(Sum,Cont);
//cout << Cont << "!!!!!!!!!!!!!!!!!" << endl;
}
//cout << Cont << " " << Cnt << " : " << L[i].Start_X << " " << L[i].Start_Y << " " << L[i].End_X << " " << L[i].End_Y << endl;
//cout << "----------------" << endl;
DFS(L[i].End_X,L[i].End_Y,Cnt + 1);
Cont--;
}
}
return ;
}
int main()
{
cin >> N >> M;
for(int i = 1;i <= N;i++)
{
for(int j = 1;j <= M;j++)
{
cin >> Box[i][j];
}
}
Box[1][1] = '#';
L[1].Start_X = N;
L[1].Start_Y = 1;
L[1].End_X = N;
L[1].End_Y = M;
for(int i = 1;i <= M;i++)
{
if(Box[N][i] == '#')
{
Line_Num += 1;
L[Line_Num].Start_X = N;
L[Line_Num].End_X = N;
L[Line_Num].Start_Y = i;
L[Line_Num].End_Y = M;
}
}
for(int i = 1;i <= Line_Num;i++)
{
for(int n = L[i].Start_X;n <= L[i].End_X;n++)
{
for(int m = L[i].Start_Y;m <= L[i].End_Y;m++)
{
if(Box[n][m] == '#' && !Vis[n][m])
{
Vis[n][m] = true;
for(int P = 1;P <= 4;P++)
{
int XX = n,YY = m;
int End_X = -1,End_Y = -1;
while(XX >= 1 && XX <= N && YY >= 1 && YY <= M)
{
XX += Dir_X[P];
YY += Dir_Y[P];
if(Box[XX][YY] == '#')
{
End_X = max(n,XX);
End_Y = max(m,YY);
}
}
if(End_X != -1 && End_Y != -1)
{
if(XX < 1)
{
XX = 1;
}
if(XX > N)
{
XX = N;
}
if(YY < 1)
{
YY = 1;
}
if(YY > M)
{
YY = M;
}
Line_Num += 1;
L[Line_Num].Start_X = min(n,XX);
L[Line_Num].End_X = End_X;
L[Line_Num].Start_Y = min(m,YY);
L[Line_Num].End_Y = End_Y;
}
}
}
}
}
}
DFS(1,1,0);
for(int i = 1;i <= Line_Num;i++)
{
//cout << L[i].Start_X << " " << L[i].Start_Y << " " << L[i].End_X << " " << L[i].End_Y << endl;
}
if(F)
{
cout << Sum;
}else
{
cout << -1;
}
}