老鼠走迷宫---算法集

问题描述
老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用 2 表示迷宫墙壁,使用 1 来表示老鼠的行走路径,试以程式求出由入口至出口的路径。
解决思路
老鼠的走法有上、左、下、右四个方向,在每前进一格之后就选一个方向前进,无法前进时退回选择下一个可前进方向,如此在阵列中依序测试四个方向,直到走到出口为止,这是递回的基本题。

#include<iostream>
using namespace std;

int visit(int,int);
int maze[7][7]={
                {2,2,2,2,2,2,2},
                {2,0,0,0,0,0,2}, 
				{2,0,2,0,2,0,2},
				{2,0,0,2,0,2,2},
				{2,2,0,2,0,2,2},
				{2,0,0,0,0,0,2},
				{2,2,2,2,2,2,2}
				}; //在数组的初始化中可以画出你的地图。 
int start1=1,start2=1;//指定入口
int end1=5,end2=5;//指定出口
int success=0;//用来标记visit函数的结果 

int main()
{
	int i,j;
	cout<<"显示迷宫"<<endl;
	for(i=0;i<7;i++)
	{
		for(j=0;j<7;j++)
	       if(maze[i][j]==2)
	          cout<<"#";
		   else
		      cout<<" ";
		cout<<endl;
	} 
	if(visit(start1,start2)==0)
	   cout<<endl<<"没有找到出口!"<<endl;
	else
	{
		cout<<endl<<"显示路径:"<<endl;
		for(i=0;i<7;i++)
		{
		    for(j=0;j<7;j++)
			{
				if(maze[i][j]==2)
				   cout<<"#";
				else if(maze[i][j]==1)
				   cout<<"*";
				else
				   cout<<" ";
			} 
			cout<<endl;
		}
	}
	return 0; 
}
int visit(int i,int j)//递归算出老鼠该走的道路,上下方向判断 
{
	maze[i][j]=1;
    if(i==end1&&j==end2)
	   success=1;
	if(success!=1&&maze[i][j+1]==0)
	   visit(i,j+1);//右 
	if(success!=1&&maze[i][j+1]==0)
	   visit(i+1,j);// 下 
	if(success!=1&&maze[i][j-1]==0)
	   visit(i,j-1);//上 
	if(success!=1&&maze[i-1][j]==0)
	   visit(i-1,j);//左 
	if(success!=1)
	   maze[i][j]=0;
	return success;
}
发布了106 篇原创文章 · 获赞 53 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_43595030/article/details/104033743