蜜汁WaQAQ
#include<bits/stdc++.h>
using namespace std;
struct lyf{
int x,y;
lyf(int x,int y):x(x),y(y){};
};
bool q[505][505][5][5];
deque<lyf> p;
int dx[5]={0,1,1,-1,-1};
int dy[5]={0,-1,1,1,-1};
bool vis[505][505];
int n,m,d[505][505];
string s;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>s;
for(int j=1;j<=s.size();j++){
if(s[j-1]=='\\'){
q[i][j][2][2]=0;
q[i+1][j+1][0][0]=0;
q[i+1][j][0][2]=1;
q[i][j+1][2][0]=1;
}
if(s[j-1]=='/'){
q[i][j][2][2]=1;
q[i+1][j+1][0][0]=1;
q[i+1][j][0][2]=0;
q[i][j+1][2][0]=0;
}
}
}
p.push_front(lyf(1,1));
memset(d,-1,sizeof(d));
vis[1][1]=1;
d[1][1]=0;
while(!p.empty()){
int sx=p.front().x;
int sy=p.front().y;
if(sx==n+1&&sy==m+1)break;
p.pop_front();
for(int i=1;i<=4;i++){
int tx=sx+dx[i];
int ty=sy+dy[i];
if(vis[tx][ty]==0&&tx>=1&&ty>=1&&tx<=n+1&&ty<=m+1){
vis[tx][ty]=1;
if(q[sx][sy][dx[i]+1][dy[i]+1]==1){
d[tx][ty]=d[sx][sy]+1;
p.push_back(lyf(tx,ty));
}
if(q[sx][sy][dx[i]+1][dy[i]+1]==0){
d[tx][ty]=d[sx][sy];
p.push_front(lyf(tx,ty));
}
}
}
}
if(d[n+1][m+1]==-1){
cout<<"NO SOLUTION";
return 0;
}
cout<<d[n+1][m+1];
return 0;
}