迷宫问题递归求解

#include <iostream.h>

#define M 10//数组大小
#define N 10

int endi=7;//结束点
int endj=3;

int v[M][N]={0};//状态位,对应a[i][j]是否被访问过

bool search(int i,int j, int a[M][N])
{
	if(v[i][j]==1)return false;//判断a[i][j]是否被访问,访问则返回,否则将访问为置1.表示其被访问了
	v[i][j]=1;
	
	if(i==endi && j==endj)//判断此点是否到达出口点
	{
		return true;
	}
	if(a[i][j]==1)//此点是否通
	{
		return false;
	}
	if(a[i][j]==0)//此点通时,对其四周进行递归访问。
	{
		if(search(i-1,j,a)){cout<<i-1<<" "<<j<<endl;return true;}
		if(search(i,j-1,a)){cout<<i<<" "<<j-1<<endl;return true;}
		if(search(i,j+1,a)){cout<<i<<" "<<j+1<<endl;return true;}
		if(search(i+1,j,a)){cout<<i+1<<" "<<j<<endl;return true;}
	}
	return false;
}

void main()
{
	
	int a[M][N]={1,1,1,1,1,1,1,1,1,1,
		1,1,1,1,1,1,1,1,1,1,
		1,0,0,0,0,0,1,1,1,1,
		1,1,0,1,1,0,1,1,1,1,
		1,1,0,0,0,0,1,0,0,1,
		1,1,1,1,1,0,0,0,0,1,
		1,1,1,1,1,1,1,1,0,1,
		1,1,1,0,0,0,1,1,0,1,
		1,1,1,1,1,0,0,0,0,1,
		1,1,1,1,1,1,1,1,1,1,
	};

	cout<<search(2,1,a)<<endl;
}
    原文作者:迷宫问题
    原文地址: https://blog.csdn.net/T_W_S/article/details/8966999
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞