72分样例1 10 12WA蒟蒻求调
  • 板块P2802 回家
  • 楼主korme
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/1/15 01:27
  • 上次更新2025/1/15 12:44:37
查看原帖
72分样例1 10 12WA蒟蒻求调
898611
korme楼主2025/1/15 01:27

应该是没有考虑到必须经过鼠标点位置的情况 但是不会解决呢

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
bool f = 0;
int n, m, t = 1008666;
int mp[10][10], vis[10][10];

int dxy[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};

void outmap() {
	cout << "\n\n";
	for (int i = 1; i <= n ; i++) {
		for (int j = 1; j <= m; j++) {
			cout << vis[i][j];

		}
		cout << endl;
	}
}

void dfs(int x, int y, int time, int hp) {
        if(time>=n*m)    return;//这是一个剪枝

	//outmap();
	//cout << x << " " << y << ' ' << time << endl;
	time++;
	hp--;
	if (hp != 0) {
		vis[x][y] = 1;
		if (mp[x][y] == 3) {
			t = min(time, t);
			f = 1;
			vis[x][y] = 0;
			//return;
		}
		if (mp[x][y] == 4) {
			hp = 6;
		}
		for (int i = 0; i < 4; i++) {
			int dx = dxy[i][0], dy = dxy[i][1];
			if (mp[x + dx][y + dy] != 0 && vis[x + dx][y + dy] == 0) {

				dfs(x + dx, y + dy, time, hp);

			}
		}
	}
}


int main() {
	cin >> n >> m;
	//memset(mp, 0, sizeof(mp));
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= m; j++) {
			cin >> mp[i][j];
		}
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= m; j++) {
			if (mp[i][j] == 2) {
				dfs(i, j, -1, 7);
			}

		}
	if (f == 1)
		cout << t;
	else
		cout << -1;
	return 0;
}

2025/1/15 01:27
加载中...