点击查看代码
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
const int N=510;
char g[N][N];
int dist[N][N];
int n,m;
int dx[4]={-1,-1,1,1};
int dy[4]={-1,1,-1,1};
int ix[4]={-1,-1,0,0};
int iy[4]={-1,0,-1,0};
char target[4]={'\\','/','/','\\'};
void bfs()
{
memset(dist,0x3f,sizeof dist);
deque<PII> dq;
dq.push_front({1,1});
dist[1][1]=0;
while(!dq.empty()){
int x=dq.front().first;
int y=dq.front().second;
dq.pop_front();
for(int i=0;i<4;i++){
int nx=x+dx[i];
int ny=y+dy[i];
int cx=x+ix[i];
int cy=y+iy[i];
if(nx>=1&&nx<=n+1&&ny>=1&&ny<=m+1){
int cost=(target[i]!=g[cx][cy]);
if(dist[nx][ny]>dist[x][y]+cost){
dist[nx][ny]=dist[x][y]+cost;
if(cost==0) dq.push_front({nx,ny});
else dq.push_back({nx,ny});
}
}
}
}
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>g[i][j];
}
}
if((n+m+2)%2==1){
cout<<"NO SOLUTION"<<endl;
return 0;
}
bfs();
cout<<dist[n+1][m+1]<<endl;
}