来源
问题
思路
问题分析:
C++代码如下:
#include <iostream>
#include <queue>
using namespace std;
//设置迷宫数组a,已经遍历数组v;
//他们的大小由迷宫的大小决定
int a[100][100], v[100][100];
//记录路程结构体,记录路程的元素,一句题意来定;
//这里记录了,xy坐标,以及步数。
struct point {
int x;
int y;
int step;
};
//定义方向数组,便于迷宫向四个方向进行遍历
int dx[4] = { 1,0,-1,0 };
int dy[4] = { 0,1,0,-1 };
int flag = 0;
int main() {
//输入部分,n是行,m是列,for循环输入数组
int n, m;
cin >> n >> m ;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> a[i][j];
}
}
//设置起点,终点
int startx = 1, starty = 1;
int endx, endy;
cin >> endx >> endy;
//BFS
//队列迷宫初始化
queue<point> migong;
point qidian;
qidian.x = startx;
qidian.y = starty;
qidian.step = 0;
migong.push(qidian);
v[1][1] = 1;//1代表已经搜索过
//开始循环
while (!migong.empty())
{
//判断是否为终点
int x = migong.front().x;
int y = migong.front().y;
if (x == endx && y == endy) {
flag = 1;
cout << migong.front().step;
break;
}
//对点的四周进行循环;
for (int i = 0; i < 4; i++)
{
int tx = x + dx[i];
int ty = y + dy[i];
//判断迷宫这个位置能走,并且没有走过。
if (a[tx][ty] == 1 && v[tx][ty] == 0)
{
point temp;
temp.x = tx;
temp.y = ty;
temp.step = migong.front().step + 1;//步数变化
migong.push(temp); //入队列
v[tx][ty] = 1; //已经走过
}
}
migong.pop();//遍历之后将其推出。
}
if (flag == 0) {
cout << "无法走到";
}
return 0;
}
总结
这是最基础的迷宫题的解法,其他笔试题应该根据具体情况具体改。