C++ dfs+记忆化 迷宫代码

最基本的算法,0表示路,1表示墙,2表示终点,8表示路径,这个算法会把所有情况都表示出来,并且不会重复在原地转圈

**

效果如下

**

在这里插入图片描述

在这里插入图片描述

**

代码与注释如下

**

#include<iostream>

using namespace std;


int a[4][4];
void dfs(int p,int q){
    
    
	
	if(a[p][q] == 1)return ;//判断条件与防止原地打圈
	if(a[p][q] == 8)return ;
	if(a[p][q] == 2){
    
    
		for(int i=0; i<4 ;i++){
    
    
			for(int j=0; j<4;j++){
    
    
				cout << a[i][j] << " ";//符合条件就立即遍历输出
			}
		cout << endl;
		}
		cout << endl;
		return ;
	}
	
	a[p][q] = 8;
	if(q<3)dfs(p,q+1);
	if(p<3)dfs(p+1,q);
	if(q>0)dfs(p,q-1);
	if(p>0)dfs(p-1,q); //把四个可能的方向一一递归
	a[p][q] = 0;
	return ;	
}

int main(){
    
    
	for(int i=0; i<4 ;i++){
    
    
		for(int j=0; j<4;j++){
    
    
			cin >> a[i][j];
		}
	}//输入迷宫样式
	cout << endl;
	dfs(0,0);
	
}

看起来蛮笨的,可以再加最大值上限,选取第一次到达终点所需次数,只要超过这个次数就退回,就能较优地找到最短路径

猜你喜欢

转载自blog.csdn.net/weixin_52559308/article/details/115526521