C++ 迷宫逃脱可能性


在这个问题中,我们给定一个由 n 个整数构成的迷宫,每个整数表示需要移动的步数,以及用 ‘>’ 和 ‘<’ 表示的方向。我们的任务是判断从索引 0 位置出发,是否能够走出迷宫。

让我们通过一个例子来理解这个问题

输入

3
2 1 1 4
> < > >

输出 − YES

解释 − 从起点开始,我们将向前移动 2 个位置,然后向前移动 1 个位置,然后向前移动 4 个位置。这将使我们走出迷宫。

为了解决这个问题,我们将检查是否能够走出迷宫。为此,我们需要走到小于 0 或大于 n 的位置。从 0 开始,我们将根据给定的整数位数和符号处理方向,并检查是否到达终点。

可能出现的另一个情况是无限循环,即用户永远无法走出迷宫的情况,这种情况发生在我们回到之前访问过的位置时。因此,为了检查这种情况,我们将标记所有已访问的位置。

示例

程序演示了我们解决方案的实现

 在线演示

#include <iostream>
using namespace std;
void isMazeSolvable (int a[], int n, string s){
   int mark[n] = {0};
   int start = 0;
   int possible = 1;
   while (start >= 0 && start < n){
      if (s == "<"){
         if (mark[start] == 0){
            mark[start] = 1;
            start -= a[start];
         } else {
            possible = 0;
            break;
         }
      } else {
         if (mark[start] == 0){
            mark[start] = 1;
            start += a[start];
         } else {
            possible = 0;
            break;
         }
      }
   }
   if (possible == 0)
      cout << "It stays inside the maze forever";
   else
      cout << "It will come out of the maze";
}
int main (){
   int n = 3;
   string s = ">><";
   int a[] = { 1, 2, 4 };
   isMazeSolvable (a, n, s);
}

输出

It will come out of the maze

更新于: 2020年4月17日

220 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.