诡异的visit数组
查看原帖
诡异的visit数组
1098465
yohoofu2011楼主2024/7/11 08:35

用于调试的代码:

#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行的值被更改了,且变成了负数!!!求助

2024/7/11 08:35
加载中...