给定机器人的移动顺序,检查该顺序是否为圆形。如果机器人的第一个和最后一个位置相同,则一系列动作是循环的。可以在以下情况之一上移动。
null
G - Go one unit L - Turn left R - Turn right
例如:
Input: path[] = "GLGLGLG"Output: Given sequence of moves is circular Input: path[] = "GLLG"Output: Given sequence of moves is circular
我们强烈建议您在继续解决方案之前单击此处并进行练习。
这个想法是考虑开始位置为(0, 0)和方向作为东(我们可以选择任何值为这些)。如果在给定的移动序列之后,我们回到(0,0),那么给定的序列是循环的,否则不是循环的。
N | | W -------------- E | | S
移动“G”根据以下规则改变x或y。 a) 如果当前方向为北,则“G”增加y,且不改变x。 b) 如果当前方向为东,则“G”增加x,而不改变y。 c) 如果当前方向为南,则“G”减小y,且不改变x。 d) 如果当前方向是西,那么“G”会减少x,而不会改变y。 移动“L”和“R”不会改变x和y坐标,它们只会根据以下规则改变方向。 a) 如果当前方向为北,则“L”的方向变为西,“R”的方向变为东 b) 如果当前方向为东,则“L”的方向变为北,“R”的方向变为南 c) 如果现在的方向是南,那么“L”的方向变为东,“R”的方向变为西 d) 如果当前方向为西,则“L”的方向变为南,“R”的方向变为北。 以下是上述理念的实施:
C++
// A c++ program to check if the given path for a robot is circular or not #include<iostream> using namespace std; // Macros for East, North, South and West #define N 0 #define E 1 #define S 2 #define W 3 // This function returns true if the given path is circular, else false bool isCircular( char path[]) { // Initialize starting point for robot as (0, 0) and starting // direction as N North int x = 0, y = 0; int dir = N; // Traverse the path given for robot for ( int i=0; path[i]; i++) { // Find current move char move = path[i]; // If move is left or right, then change direction if (move == 'R' ) dir = (dir + 1)%4; else if (move == 'L' ) dir = (4 + dir - 1)%4; // If move is Go, then change x or y according to // current direction else // if (move == 'G') { if (dir == N) y++; else if (dir == E) x++; else if (dir == S) y--; else // dir == W x--; } } // If robot comes back to (0, 0), then path is cyclic return (x == 0 && y == 0); } // Driver program int main() { char path[] = "GLGLGLG" ; if (isCircular(path)) cout << "Given sequence of moves is circular" ; else cout << "Given sequence of moves is NOT circular" ; } |
JAVA
// Write Java code here // A Java program to check if // the given path for a robot // is circular or not class GFG { // Macros for East, North, South and West // This function returns true if // the given path is circular, // else false static boolean isCircular( char path[]) { // Initialize starting // point for robot as // (0, 0) and starting // direction as N North int x = 0 , y = 0 ; int dir = 0 ; // Traverse the path given for robot for ( int i= 0 ; i < path.length; i++) { // Find current move char move = path[i]; // If move is left or // right, then change direction if (move == 'R' ) dir = (dir + 1 )% 4 ; else if (move == 'L' ) dir = ( 4 + dir - 1 ) % 4 ; // If move is Go, then // change x or y according to // current direction else // if (move == 'G') { if (dir == 0 ) y++; else if (dir == 1 ) x++; else if (dir == 2 ) y--; else // dir == 3 x--; } } // If robot comes back to // (0, 0), then path is cyclic return (x == 0 && y == 0 ); } // Driver program public static void main(String[] args) { String path_ = "GLGLGLG" ; char path[] = path_.toCharArray(); if (isCircular(path)) System.out.println( "Given sequence" + " of moves is circular" ); else System.out.println( "Given sequence" + " of moves is NOT circular" ); } } // This code is contributed by prerna saini. |
python
# Python program to check if the given path for a robot is circular # or not N = 0 E = 1 S = 2 W = 3 # This function returns true if the given path is circular, # else false def isCircular(path): # Initialize starting point for robot as (0, 0) and starting # direction as N North x = 0 y = 0 dir = N # Traverse the path given for robot for i in xrange ( len (path)): # Find current move move = path[i] # If move is left or right, then change direction if move = = 'R' : dir = ( dir + 1 ) % 4 elif move = = 'L' : dir = ( 4 + dir - 1 ) % 4 # If move is Go, then change x or y according to # current direction else : # if move == 'G' if dir = = N: y + = 1 elif dir = = E: x + = 1 elif dir = = S: y - = 1 else : x - = 1 return (x = = 0 and y = = 0 ) # Driver program path = "GLGLGLG" if isCircular(path): print "Given sequence of moves is circular" else : print "Given sequence of moves is NOT circular" # This code is contributed by BHAVYA JAIN |
C#
// A C# program to check if // the given path for a robot // is circular or not using System; class GFG { // Macros for East, North, South and West // This function returns true if // the given path is circular, // else false static bool isCircular( string path) { // Initialize starting // point for robot as // (0, 0) and starting // direction as N North int x = 0, y = 0; int dir = 0; // Traverse the path // given for robot for ( int i = 0; i < path.Length; i++) { // Find current move char move = path[i]; // If move is left or // right, then change direction if (move == 'R' ) dir = (dir + 1) % 4; else if (move == 'L' ) dir = (4 + dir - 1) % 4; // If move is Go, then // change x or y according to // current direction // if (move == 'G') else { if (dir == 0) y++; else if (dir == 1) x++; else if (dir == 2) y--; else // dir == 3 x--; } } // If robot comes back to // (0, 0), then path is cyclic return (x == 0 && y == 0); } // Driver Code public static void Main(String[] args) { string path = "GLGLGLG" ; if (isCircular(path)) Console.WriteLine( "Given sequence of moves is circular" ); else Console.WriteLine( "Given sequence of moves is NOT circular" ); } } // This code is contributed by Sam007 |
Javascript
<script> // A Javascript program to check if // the given path for a robot // is circular or not // Macros for East, North, South and West // This function returns true if // the given path is circular, // else false function isCircular(path) { // Initialize starting // point for robot as // (0, 0) and starting // direction as N North let x = 0, y = 0; let dir = 0; // Traverse the path // given for robot for (let i = 0; i < path.length; i++) { // Find current move let move = path[i]; // If move is left or // right, then change direction if (move == 'R' ) dir = (dir + 1) % 4; else if (move == 'L' ) dir = (4 + dir - 1) % 4; // If move is Go, then // change x or y according to // current direction // if (move == 'G') else { if (dir == 0) y++; else if (dir == 1) x++; else if (dir == 2) y--; else // dir == 3 x--; } } // If robot comes back to // (0, 0), then path is cyclic return (x == 0 && y == 0); } let path = "GLGLGLG" ; if (isCircular(path)) document.write( "Given sequence of moves is circular" ); else document.write( "Given sequence of moves is NOT circular" ); // This code is contributed by decode2207. </script> |
输出:
Given sequence of moves is circular
时间复杂度:O(n),其中n是给定序列中的移动次数。
这篇文章是有贡献的 卡斯图布·德什穆克 。如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请发表评论。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END