用于调试的代码:
#include<bits/stdc++.h>
using namespace std;
int m, n, mv[5][2] = {{0, 0}, {1, 0}, {0, 1}, {0, -1}, {-1, 0}}, dt[107][107], sx, sy, dx, dy, ans = 0x3f3f3f3f, x, y, z;
bool f ;
int vis[107][107];
struct Node {
int x, y;
} path[107 * 107];
int bh[107][107];
int idx = 1;
void dfs(int x, int y, int t, int c, bool tf) {
if (x == m && y == m) {
ans = min(ans, t);
for (int i = 1; i < idx; i++) cout << "(" << path[i].x << "," << path[i].y << ")";
cout << ' ' << ans << endl;
f = true;
return;
}
for (int i = 1; i <= 4; i++) {
dx = x + mv[i][0];
dy = y + mv[i][1];
if (dx < 1 || dy < 1 || dx > m || dy > m || vis[dx][dy]) {
continue;
}
if (tf == true && dt[dx][dy] == -1) {
continue;
}
cout << dx << ",,," << dy << endl;
vis[dx][dy] ++;
for (int j = 0; j <= m; j++) {
for (int u = 0; u <= m; u++) {
cout << vis[j][u] << " ";
}
cout << endl;
}
if (dt[dx][dy] == -1) {
path[idx++] = Node{dx, dy};
dfs(dx, dy, t + 2, c, true);
idx--;
} else if (dt[dx][dy] != c) {
path[idx++] = Node{dx, dy};
dfs(dx, dy, t + 1, dt[dx][dy], false);
idx--;
} else {
path[idx++] = Node{dx, dy};
dfs(dx, dy, t, dt[dx][dy], false);
idx--;
}
vis[dx][dy] --;
}
return;
}
int main() {
cin >> m >> n;
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= m; j++) {
dt[i][j] = -1;
bh[i][j] = idx++;
}
}
for (int i = 1; i <= n; i++) {
cin >> x >> y >> z;
dt[x][y] = z;
}
idx = 1;
vis[1][1] = true;
path[idx++] = Node{1, 1};
dfs(1, 1, 0, dt[1][1], false);
if (f) {
cout << ans;
} else {
cout << -1;
}
return 0;
}
原代码:
#include<bits/stdc++.h>
using namespace std;
int m, n, mv[5][2] = {{0, 0}, {0, 1}, {1, 0}, {-1, 0}, {0, -1}}, dt[107][107], sx, sy, dx, dy, ans, x, y, z;
bool vis[107][107], f;
void dfs(int x, int y, int t, int c, bool tf) {
if (x == m && y == m) {
if (f) {
ans = min(ans, t);
f = true;
return;
} else {
ans = t;
f = true;
return;
}
}
for (int i = 1; i <= 4; i++) {
dx = x + mv[i][0];
dy = y + mv[i][1];
if (dx < 1 || dy < 1 || dx > m || dy > m || vis[dx][dy]) {
continue;
}
if (tf == true && dt[dx][dy] == -1) {
continue;
}
vis[dx][dy] = true;
if (dt[dx][dy] == -1) {
dfs(dx, dy, t + 2, c, true);
} else if (dt[dx][dy] != c) {
dfs(dx, dy, t + 1, dt[dx][dy], false);
} else {
dfs(dx, dy, t, dt[dx][dy], false);
}
vis[dx][dy] = false;
}
return;
}
int main() {
cin >> m >> n;
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= m; j++) {
dt[i][j] = -1;
}
}
for (int i = 1; i <= n; i++) {
cin >> x >> y >> z;
dt[x][y] = z;
}
vis[1][1] = true;
dfs(1, 1, 0, dt[1][1], false);
if (f) {
cout << ans;
} else {
cout << -1;
}
return 0;
}
在调试代码中,visit数组的第0行的值被更改了,且变成了负数!!!求助