DFS+剪枝求助
查看原帖
DFS+剪枝求助
972001
YING_Miranda楼主2024/8/10 17:15
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n, m, sx, sy, gx, gy;
int ans = INT_MAX;
bool vis[101][101], mp[101][101], a[101][101];
int d[4][2] = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}};
void dfs(int x, int y, int step){
	if(x == gy and y == gx){
		ans = min(ans, step);
		return;
	}
	for(int i = 0; i < 4; i++){
		int dx = x + d[i][0];
		int dy = y + d[i][1];
		if(step > a[dx][dy]) continue;
		if(mp[dx][dy] == 0 && !vis[dx][dy] && dx <= n && dy <= m){
			a[dx][dy] = step;
			vis[dx][dy] = 1;
			dfs(dx, dy, step+1);
			vis[dx][dy] = 0;
		}
	}
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	cin >> n >> m >> sy >> sx >> gy >> gx;
	for(int i = 1; i <= n; i++){
		string s;
		cin >> s;
		for(int j = 1; j <= m; j++)
			if(s[j - 1] == '#') mp[i][j] = 1;
	}
	memset(a, 128, sizeof(a));
	dfs(sy, sx, 0);
	cout << ans << endl;
	return 0;
}

原先不加剪枝TLE

加了之后样例不过QwQ

2024/8/10 17:15
加载中...