【算法】求解迷宫路径算法(C++源码)
一、任务描述
以如下8*8的迷宫图为例,左边是迷宫的布局,右边 为求解得到的一条迷宫路径:
OXXXXXXX
OOOOOXXX
XOXXOOOX
XOXXOXXO
XOXXXXXX
XOXXOOOX
XOOOOXOO
XXXXXXXO
其中,O表示通路方块,X表示障碍方块。假设入口是位置(0,0),出口 为右下角方块位置(7,7)。设计一个程序采用递归方法求指定入口到出口的 一条迷宫路径
二、步骤描述
判断前后的字符是否为路径,根据下右上左的顺序依次判断,最后替换输出。
三、运行结果截图
四、源代码(C++)
/*OXXXXXXX
OOOOOXXX
XOXXOOOX
XOXXOXXO
XOXXXXXX
XOXXOOOX
XOOOOXOO
XXXXXXXO*/
#include <iostream>
using namespace std;
int main()
{
char a[8][8];
a[0][0]={'O'},a[0][1]={'X'},a[0][2]={'X'},a[0][3]={'X'},a[0][4]={'X'},a[0][5]={'X'},a[0][6]={'X'},a[0][7]={'X'};
a[1][0]={'O'},a[1][1]={'O'},a[1][2]={'O'},a[1][3]={'O'},a[1][4]={'O'},a[1][5]={'X'},a[1][6]={'X'},a[1][7]={'X'};
a[2][0]={'X'},a[2][1]={'O'},a[2][2]={'X'},a[2][3]={'X'},a[2][4]={'X'},a[2][5]={'X'},a[2][6]={'X'},a[2][7]={'X'};
a[3][0]={'X'},a[3][1]={'O'},a[3][2]={'X'},a[3][3]={'X'},a[3][4]={'X'},a[3][5]={'X'},a[3][6]={'X'},a[3][7]={'X'};
a[4][0]={'X'},a[4][1]={'O'},a[4][2]={'X'},a[4][3]={'X'},a[4][4]={'X'},a[4][5]={'X'},a[4][6]={'X'},a[4][7]={'X'};
a[5][0]={'X'},a[5][1]={'O'},a[5][2]={'X'},a[5][3]={'X'},a[5][4]={'O'},a[5][5]={'O'},a[5][6]={'O'},a[5][7]={'X'};
a[6][0]={'X'},a[6][1]={'O'},a[6][2]={'O'},a[6][3]={'O'},a[6][4]={'O'},a[6][5]={'X'},a[6][6]={'O'},a[6][7]={'O'};
a[7][0]={'X'},a[7][1]={'X'},a[7][2]={'X'},a[7][3]={'X'},a[7][4]={'X'},a[7][5]={'X'},a[7][6]={'X'},a[7][7]={'O'};
int i,ii=0,jj=0;
for(i=0;i<20;i++)
{
if(a[ii][jj]=='O' && a[ii+1][jj]=='O')
{
a[ii][jj]={'|'};
ii++;
}
if(a[ii][jj]=='O' && a[ii][jj+1]=='O')
{
a[ii][jj]={'-'};
jj++;
}
if(a[ii][jj]=='O' && a[ii-1][jj]=='O')
{
a[ii][jj]={'|'};
ii--;
}
if(a[ii][jj]=='O' && a[ii][jj-1]=='O')
{
a[ii][jj]={'-'};
jj--;
}
}
a[7][7]={'|'};
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
cout<<a[i][j];
}
cout<<endl;
}
return 0;
}