C2 创新题为:走迷宫游戏。 有6*6的方格,其中有8个障碍,你需要从(1,1)到(6,6),顺利通过,求最小步数。
010000
000100
001001
100010
011000
000100
//欧阳涟政//老师我是看视频打的,可能会和同学类似,但概念懂了,视频是广度迷宫那个。
#include<iostream>
#include<queue>
using namespace std;
int a[7][7], v[7][7];//访问数组v
struct point
{
int x; int y;
int step;
};
queue<point> r;
int dx[4] = { 0,1,0,-1 };
int dy[4] = {1,0,-1,0};
int main()
{
cout<<"请输入几行几列";
int n, m,startx,starty,p,q;
cin >> n >> m;
cout<<" 请输入迷宫的样式";
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
cin >> a[i][j];
}
}
cout<<"请输入起终点位置";
cin >> startx >> starty >> p >> q;
point start;
start.x = startx;
start.y = starty;
start.step = 0;
r.push(start);//将起点入队
v[startx][starty] = 1;
int flag = 0;
while (!r.empty())
{
int x = r.front().x, y = r.front().y;
if (x == p && y == q)
{
cout << r.front().step;
break;
}
for (int k = 0; k <= 3; k++)
{
int tx, ty;
tx = x + dx[k];
ty = y + dy[k];
if (a[tx][ty] == 1 && v[tx][ty] == 0)
{
//入队
point temp;
temp.x = tx;
temp.y = ty;
temp.step = r.front().step + 1;
r.push(temp);
v[tx][ty] = 1;
}
}
r.pop();
}
if (flag == 0)
{
cout << "迷宫没有出口";
}
}