震惊
查看原帖
震惊
19812
Divinitist楼主2023/3/28 01:46

写法一

int nx, ny;
void dfs(int x, int y){
	if(x == n)
		res = true;
	if(res)
		return;
	for(int i = 0; i < 4; ++i){
		nx = x + dx[i], ny = y + dy[i];
		if(nx < 1 || nx > n || ny < 1 
		|| ny > m || vis[nx][ny] || p[nx][ny] > d)
			continue;
		vis[nx][ny] = 1; 
		dfs(nx, ny);
		vis[nx][ny] = 0;
		if(res) break;
	}
}

不知为何比写法二

void dfs(int x, int y){
	if(x == n)
		res = true;
	if(res)
		return;
	for(int i = 0; i < 4; ++i){
		int nx = x + dx[i], ny = y + dy[i];
		if(nx < 1 || nx > n || ny < 1 
		|| ny > m || vis[nx][ny] || p[nx][ny] > d)
			continue;
		vis[nx][ny] = 1; 
		dfs(nx, ny);
		vis[nx][ny] = 0;
		if(res) break;
	}
}

快很多(两种写法差别在于 nxnxnyny 是否为全局变量)。

2023/3/28 01:46
加载中...