应该是没有考虑到必须经过鼠标点位置的情况 但是不会解决呢
#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;
}