给定迷宫中的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