88分求调
  • 板块P2802 回家
  • 楼主Hugh_Yu
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/7/27 15:12
  • 上次更新2025/7/27 19:58:39
查看原帖
88分求调
1042965
Hugh_Yu楼主2025/7/27 15:12

题目:P2802 回家

#include <bits/stdc++.h>
using namespace std;

int n, m;
int a[10][10];
int color[10][10] = { 0 };
int xue = 6;
int path = 120;
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, -1, 0, 1};

void dfs(int i, int j, int xue, int step) {
	if (xue <= 0)  return;
	if (step >= n * m)    return;
	if (step > path)   return;
	
	if (a[i][j] == 3) {             
		if (path > step) {
			path = step;
		}
		return;
	}
	
	if (a[i][j] == 4)  xue = 6;
	
	for (int k = 0; k < 4; k ++) {
		int tx = i + dx[k];
		int ty = j + dy[k];
		if (a[tx][ty] != 0) {
			
			dfs(tx, ty, xue-1, step + 1);
			
		}
	}
	
}

int main() {
	cin >> n >> m;
	for (int i = 1; i <= n; i ++) {
		for (int j = 1; j <= m; j ++) {
			cin >> a[i][j];
		}
	}
	
	for (int i = 1; i <= n; i ++) {
		for (int j = 1; j <=m ; j ++) {
			if (a[i][j] == 2) {
				dfs(i, j, 6, 0);
				break;
			}
		}
	}
	
	if (path == 120) {
		cout << "-1";
	} else {
		cout << path;
	}
	return 0;
}

各位大佬帮帮我吧...

2025/7/27 15:12
加载中...