走出迷宫的可能性

给定迷宫中的n个整数,表示从该位置移动的次数,以及一个带有“>”和“ 打印它是留在阵列内还是移出阵列。

null

例子:

Input : 3         2 1 1         > > <       Output: It stays inside foreverExplanation: It moves towards right by a position of 2, hence is at the last index, then it moves to the left by 1, and then it again moves to the right by 1. Hence it doesn't goout.Input: 2       1 2        > <        Output: comes out Explanation: Starts at 0th index, moves right by 1 position, and then moves left by 2 to come out 

解决上述问题的方法如下: 我们从第0个索引开始移动,直到超过n或减少0。如果我们两次到达同一个位置,那么我们就处在一个无限循环中,永远无法离开。 *使用标记数组标记访问的位置 *从第0个索引开始,检查移动标志并移动到该位置,将该位置标记为已访问 *如果我们被拜访了,我们就永远搬不出去了,因此就爆发了 *检查从循环中断的原因,并打印所需结果。 //下面是上述方法的python实现。

JAVA

//Java Possibility of moving out of maze
import java.io.*;
class GFG
{
// Function to check whether it
// will stay inside or come out
static void checkingPossibility( int a[], int n, String s)
{
// marks all the positions that is visited
int mark[] = new int [a[ 0 ] * n] ;
// Initial starting point
int start = 0 ;
// initial assumption is it comes out
int possible = 1 ;
//runs till it is inside or comes out
while ( start >= 0 && start < n)
{
//if the movement is towards left
//then we move left. The start variable
// and mark that position as visited
// if not visited previously. Else we
// break out
if (s == "<" )
{
if (mark[start] == 0 )
{
mark[start] = 1 ;
start -= a[start] ;
}
// It will be inside forever
else {
possible = 0 ;
break ;}
}
// If the movement is towards right, then
// we move right. The start variable and
// mark that position as visited if not
// visited previously else we break out
else
{
if (mark[start] == 0 )
{
mark[start] = 1 ;
start += a[start] ;
}
// it will be inside forever
else
{
possible = 0 ;
break ;
}
}
}
if (possible == 0 )
System.out.print( "it stays inside forever" );
else
System.out.print ( "comes out" );
}
// Driver code
public static void main (String[] args)
{
int n = 2 ;
String s = "><" ;
int a[] = { 1 , 2 };
checkingPossibility(a, n, s);
}
}
// This code is contributed by vt_m.


Python3

# Function to check whether it will stay inside
# or come out
def checkingPossibility(a, n, s):
# marks all the positions that is visited
mark = [ 0 ] * n
# Initial starting point
start = 0
# initial assumption is it comes out
possible = 1
# runs till it is inside or comes out
while start > = 0 and start < n:
# if the movement is towards left
# then we move left. The start variable
# and mark that position as visited
# if not visited previously. Else we
# break out
if s[start] = = "<" :
if mark[start] = = 0 :
mark[start] = 1
start - = a[start]
# It will be inside forever
else :
possible = 0
break
# If the movement is towards right, then
# we move right. The start variable and
# mark that position as visited if not
# visited previously else we break out
else :
if mark[start] = = 0 :
mark[start] = 1
start + = a[start]
# it will be inside forever
else :
possible = 0
break
if possible = = 0 :
print "it stays inside forever"
else :
print "comes out"
# Driver code
n = 2
s = "><"
a = [ 1 , 2 ]
checkingPossibility(a, n, s)


C#

// C# Possibility of moving out of maze
using System;
class GFG {
// Function to check whether it
// will stay inside or come out
static void checkingPossibility( int []a,
int n, String s)
{
// marks all the positions that
// is visited
int []mark = new int [a[0] * n] ;
// Initial starting point
int start = 0;
// initial assumption is it
// comes out
int possible = 1;
//runs till it is inside or
// comes out
while ( start >= 0 && start < n)
{
//if the movement is towards
// left then we move left.
// The start variable and
// mark that position as
// visited if not visited
// previously. Else we
// break out
if (s == "<" )
{
if (mark[start] == 0)
{
mark[start] = 1;
start -= a[start] ;
}
// It will be inside forever
else
{
possible = 0;
break ;
}
}
// If the movement is towards
// right, then we move right.
// The start variable and mark
// that position as visited if
// not visited previously else
// we break out
else
{
if (mark[start] == 0)
{
mark[start] = 1;
start += a[start] ;
}
// it will be inside forever
else
{
possible = 0;
break ;
}
}
}
if (possible == 0)
Console.Write( "it stays "
+ "inside forever" );
else
Console.Write( "comes out" );
}
// Driver code
public static void Main ()
{
int n = 2;
String s = "><" ;
int []a = {1, 2};
checkingPossibility(a, n, s);
}
}
// This code is contributed by vt_m.


Javascript

<script>
// Javascript Possibility of moving out of maze
// Function to check whether it
// will stay inside or come out
function checkingPossibility(a, n, s)
{
// marks all the positions that
// is visited
let mark = new Array(a[0] * n);
mark.fill(0);
// Initial starting point
let start = 0;
// initial assumption is it
// comes out
let possible = 1;
//runs till it is inside or
// comes out
while (start >= 0 && start < n)
{
//if the movement is towards
// left then we move left.
// The start variable and
// mark that position as
// visited if not visited
// previously. Else we
// break out
if (s == "<" )
{
if (mark[start] == 0)
{
mark[start] = 1;
start -= a[start] ;
}
// It will be inside forever
else
{
possible = 0;
break ;
}
}
// If the movement is towards
// right, then we move right.
// The start variable and mark
// that position as visited if
// not visited previously else
// we break out
else
{
if (mark[start] == 0)
{
mark[start] = 1;
start += a[start] ;
}
// it will be inside forever
else
{
possible = 0;
break ;
}
}
}
if (possible == 0)
document.write( "it stays " + "inside forever" );
else
document.write( "comes out" );
}
let n = 2;
let s = "><" ;
let a = [1, 2];
checkingPossibility(a, n, s);
</script>


输出:

comes out

时间复杂性: O(n)

本文由 Twinkl Bajaj .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享