| 黄 | -- | 黄 | -- | -- | -- | -- |
| -----------: | -----------: | -----------: | -----------: | -----------: | -----------: | -----------: | -----------: |
| | | | 黄 | | 红 | |
| | | | | | 黄 | |
| | | 黄 | 红 | | | 黄 |
| | | | | 红 | 黄 | 黄 |
| 黄 | | | | | | |
| | 黄 | | | | 红 | 红 |
上面打错了
求一种走到11的方法
by dadaaa @ 2021-08-24 22:26:06
```cpp
#include <bits/stdc++.h>
using namespace std;
int m, n, x[1010], y[1010], c[1010], vis[1010], s, t, p, q;
int col[110][110];
vector<pair<int,int> > G[1010];
void add(int u, int v, int w) {
G[u].push_back(make_pair(v, w));
G[v].push_back(make_pair(u, w));
}
int bfs(void) {
priority_queue<pair<int,int> > Q;
Q.push(make_pair(0, s));
while (!Q.empty()) {
pair<int,int> PA = Q.top();
Q.pop();
int d = -PA.first;
int u = PA.second;
if (vis[u]) continue;
vis[u] = 1;
if (u == t) {
return d;
}
for (int i = 0; i < G[u].size(); i++) {
int v = G[u][i].first;
int w = G[u][i].second;
Q.push(make_pair(-(d+w), v));
}
}
return -1;
}
int main() {
cin >> m >> n;
if (m == 1) {
cout << 0 << endl;
return 0;
}
for (int i = 1; i <= n; i++) {
cin >> x[i] >> y[i] >> c[i];
c[i]++;
if (x[i] == 1 && y[i] == 1) s = i;
else if (x[i] == m && y[i] == m) t = i;
else if (x[i] == m && y[i] == m-1) p = i;
else if (x[i] == m-1 && y[i] == m) q = i;
col[x[i]][y[i]] = c[i];
}
for (int i = 1; i < n; i++) {
for (int j = i+1; j <= n; j++) {
if ((x[i]==x[j]&&(y[i]-y[j]==1||y[j]-y[i]==1))||(y[i]==y[j]&&(x[i]-x[j]==1||x[j]-x[i]==1))) add(i, j, c[i]!=c[j]);
else if ((x[i]-x[j]==1||x[j]-x[i]==1)&&(y[i]-y[j]==1||y[j]-y[i]==1)&&(!(col[x[i]][y[j]]||col[x[j]][y[i]]))) add(i, j, (c[i]!=c[j])+2);
else if (((x[i]==x[j]&&(y[i]-y[j]==2||y[j]-y[i]==2))||(y[i]==y[j]&&(x[i]-x[j]==2||x[j]-x[i]==2)))&&(!col[(x[i]+x[j])>>1][(y[i]+y[j])>>1])) add(i, j, (c[i]!=c[j])+2);
}
}
if (!t) {
t = n+1;
if (p) add(p, t, 2);
if (q) add(q, t, 2);
}
cout << bfs() << endl;
return 0;
}
```
by 0x3F @ 2021-08-24 22:29:14
跑一边
by 0x3F @ 2021-08-24 22:29:26
兄弟你第6行第5列,不是白格是红格,我看你的图搞了半天。
by Vivi233 @ 2021-09-16 16:01:27