不知道为什么,窝在别的网站上码了CODE,
想顺便再嫖点估值,但是不知道为什么
自己和题解上的代码都全WA了 \fad
#include <bits/stdc++.h>
using namespace std;
const int N= 251010;
struct node
{
int x, y, z, next;
} edge[N << 2];
int t, n, m, cnt, head[2 * N], dis[N], ed;
bool vis[N];
char s[N];
deque <int> q;
void add(int x, int y, int z) {edge[++cnt] = (node){x, y, z, head[x]}, head[x] = cnt;}
void bfs()
{
q.push_back(1);
memset(vis, 0, sizeof(vis));
memset(dis, 127 / 3, sizeof(dis));
dis[1] = 0;
while(q.size())
{
int u = q.front(); q.pop_front(); vis[u] = 0;
for(int i = head[u]; i; i = edge[i].next)
{
int v = edge[i].y;
if(dis[u] + edge[i].z < dis[v])
{
dis[v] = dis[u] + edge[i].z;
if(!vis[v])
{
vis[v] = 1;
if(!edge[i].z) q.push_front(v);
else q.push_back(v);
}
}
}
}
}
int main()
{
scanf("%d", &t);
while(t--)
{
scanf("%d%d", &n, &m);
memset(head, 0, sizeof(head)), cnt = 0;
for(int i = 1; i <= n; i++)
{
scanf("%s", s + 1);
for(int j = 1; j <= m; j++)
{
if(s[j] == '/')
{
add(j + 1 + (i - 1) * (m + 1) , j + i * (m + 1) , 0);
add(j + i * (m + 1) , j + 1 + (i - 1) * (m + 1) , 0);
add(j + (i - 1) * (m + 1) , j + 1 + i * (m + 1) , 1);
add(j + 1 + i * (m + 1) , j + (i - 1) * (m + 1) , 1);
}
else
{
add(j + 1 + (i - 1) * (m + 1) , j + i * (m + 1) , 1);
add(j + i * (m + 1) , j + 1 + (i - 1) * (m + 1) , 1);
add(j + (i - 1) * (m + 1) , j + 1 + i * (m + 1) , 0);
add(j + 1 + i * (m + 1) , j + (i - 1) * (m + 1) , 0);
}
}
}
ed = (n + 1) * (m + 1), bfs();
if(dis[ed] == 707406378) printf("NO SOLUTION\n");
else printf("%d\n", dis[ed]);
}
return 0;
}