求助,,模仿第一篇题解写的,为什么我的就不对 : (
查看原帖
求助,,模仿第一篇题解写的,为什么我的就不对 : (
419652
MOXCOOT楼主2021/2/15 19:57
#include<iostream>
#define NUM 100
#define INF 985
using namespace std;
int m, n, ans = INF;
int a[NUM][NUM] = { 0 }, f[NUM][NUM] = { 0 };
int dx[] = { -1,0,0,1 };
int dy[] = { 0,1,-1,0 };
void dfs(int x, int y, int sum, bool flag) {
	if (x<0 || x>=m || y<0 || y>=m || sum >= f[x][y]) return;
	f[x][y] = sum;
	if (x == m - 1 && y == m - 1) {
		ans = sum;
		return;
	}
	for (int i = 0; i < 4; i++) {
		int nx = x + dx[i];
		int ny = x + dy[i];
		if (a[nx][ny] >= 0) {
			if (a[nx][ny] == a[x][y])
				dfs(nx, ny, sum, 0);
			else
				dfs(nx, ny, sum + 1, 0);
		}
		else{
			if (!flag) {
				a[nx][ny] = a[x][y];
				dfs(nx, ny, sum + 2, 1);
				a[nx][ny] = -1;
			}
		}
	}
}
int main() {
	cin >> m >> n;
	memset(a, -1, sizeof(a));
	for (int i = 0; i < n; i++) {
		int x, y;
		cin >> x >> y;
		cin >> a[x - 1][y - 1];
	}
	dfs(0, 0, 0, 0);
	cout << (ans == INF) ? -1 : ans;
}

2021/2/15 19:57
加载中...