为什么dfs求最短路和总方案数是错的
  • 板块学术版
  • 楼主Cute_Furina
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/8/17 22:20
  • 上次更新2024/8/18 10:08:59
查看原帖
为什么dfs求最短路和总方案数是错的
1181602
Cute_Furina楼主2024/8/17 22:20

"#"表示障碍"*"表示路

#include<bits/stdc++.h>
using namespace std;
int n, m, a[110][110], b[110][110];
int xu, yu, xp, yp;
int ans, minn = 1e9;
int ux[5], uy[5];
void dfs(int x, int y, int cnt) {
	if(x == xp && y == xp) {
		if(cnt < minn) {
			minn = cnt;
		}
		ans ++;
		return ;
	}
	for(int i = 1;i <= 4;i ++) {
		int xx = x + ux[i], yy = y + uy[i];
		if(a[xx][yy] && b[xx][yy] == 0) {
			b[x][y] = 1;
			dfs(x + ux[i], y + uy[i], cnt + 1 );
			b[x][y] = 0;
		}
	}
}
int main() {
	//freopen("findfriend.in", "r", stdin);
	//freopen("findfriend.out", "w", stdout);
	cin >> n >> m;
	for(int i = 1;i <= n;i ++) {
		for(int j = 1;j <= m;j ++) {
			char c;
			cin >> c;
			if(c == '*') a[i][j] = 1;
		}
	}
	cin >> xu >> yu >> xp >> yp;
	xu += 1, yu += 1, xp += 1, yp += 1;
	if(xu > xp) {
		ux[1] = -1;
		ux[2] = 1;
	}
	else ux[1] = 1, ux[2] = -1;
	if(yu > yp) {
		uy[3] = -1;
		uy[4] = 1;
	}
	else uy[3] = 1, uy[4] = -1;
	dfs(xu, yu, 1);
	cout << ans << endl << minn;
	return 0;
} 

求助

2024/8/17 22:20
加载中...