1. 用循环解决迷宫问题
先看下图的迷宫
这里的1代表墙,0代表通道。(只解决简单的迷宫是否有出口问题或者输出一条路径)
首先我们需要接收这样一个迷宫,那就定义一个二维数组来保存它。
#define N 10
int maze[N][N];
void GetMaze(int *arr, int n)
{
FILE *f = fopen("test.txt","r");//test.txt里保存的是迷宫
assert(f);
for(int i = 0;i<N; i++)
{
for(int j = 0; j<N; )
{
int a = fgetc(f)-'0';//读出来的是字符,所以要减去字符0
if(a == 1||a == 0)//只有当读取到0和1是将它放进数组,空格和其他字符则跳过
{
arr[i*n+j] = a;
j++;
}
else if(arr[i*n+j] == EOF)
{
exit(0);
}
}
}
}
然后还要保证能输出迷宫
void PrintMaze(int* arr, int n)
{
assert(arr);
for(int i = 0; i<n; i++)
{
for(int j = 0; j<n; j++)
{
cout<<arr[i*n+j]<<" ";
}
cout<<endl;
}
}
接着我们定义一个储存结构体类型的栈,保存通路的路径。
struct Pos
{
int _row;//行
int _col;//列
};
stack<Pos> path;
每走一步,若此步可通,就将其坐标压入栈中,不通则不入栈。
具体过程在下面代码中实现。
#include<iostream>
#include<stack>
#include<assert.h>
using namespace std;
#define N 10
struct Pos
{
i