#include<bits/stdc++.h>
#define int long long
#define PII pair< int, int >
#define MII map< int, int >
#define MIB map< int, bool >
using namespace std;
const int N = 5e2 + 5, mod = 998244353;
int h[N * N * 4], e[N * N * 4], ne[N * N * 4], w[N * N * 4], idx;
int n, m, fx[4][2] = {-1, -1, -1, 1, 1, 1, 1, -1};
char c[N][N];
int dis[N * N * 4];
bool s[N];
int bh(int x, int y){ return (x-1) * (m+1) + y; }
int dij(){
for (int i = 1; i <= 1000000; i++) dis[i] = 9;
memset(s, false, sizeof s);
priority_queue< PII > q;
dis[1] = 0;
q.push({0, 1});
while (!q.empty()){
int t = q.top().second;
q.pop();
if (s[t]) continue;
s[t] = true;
for (int i = h[t]; ~i; i = ne[i]){
int j = e[i];
if (dis[j] > dis[t] + w[i]){
dis[j] = dis[t] + w[i];
q.push({-dis[j], j});
}
}
}
return dis[bh(n + 1, m + 1)];
}
void add(int u, int v, int wi){
e[idx] = v;
ne[idx] = h[u];
w[idx] = wi;
h[u] = idx++;
e[idx] = u;
ne[idx] = h[v];
w[idx] = wi;
h[v] = idx++;
}
signed main(){
// freopen("a.in", "r", stdin);
// freopen("a.out","w",stdout);
scanf("%lld %lld", &n, &m);
if (n + m & 1){
printf("NO SOLUTION");
return 0;
}
memset(h, -1, sizeof h);
idx = 1;
for (int i = 1; i <= n; i++){
for (int j = 1; j <= m; j++){
cin >> c[i][j];
for (int k = 0; k < 2; k++){
int x = i + fx[k][0], y = j + fx[k][1];
if (x < 1 || x > n + 1 || y < 1 || y > m + 1) continue;
if (k % 2){
if (c[i][j] == '/') add(bh(x, y), bh(i, j), 0);
else add(bh(x, y), bh(i, j), 1);
}
else {
if (c[i][j] == '\\') add(bh(x, y), bh(i, j), 0);
else add(bh(x, y), bh(i, j), 1);
}
}
if (i == n || j == m){
for (int k = 2; k < 4; k++){
int x = i + fx[k][0], y = j + fx[k][1];
if (x < 1 || x > n + 1 || y < 1 || y > m + 1) continue;
if (k % 2){
if (c[i][j] == '/') add(bh(x, y), bh(i, j), 0);
else add(bh(x, y), bh(i, j), 1);
}
else {
if (c[i][j] == '\\') add(bh(x, y), bh(i, j), 0);
else add(bh(x, y), bh(i, j), 1);
}
}
}
}
}
printf("%lld\n", dij());
return 0;
}
其他的全 WA 了。