Дадено е R x C (1<= R C <= 1000000000) grid and initial position as top left corner and direction as east. Now we start running in forward direction and cross each square blocks of matrix. Whenever we find dead end or reach a cell that is already visited we take right because we can not cross the visited square blocks again. Tell the direction when we will be at last square block.
python __име__
Например: Да разгледаме случая с R = 3 C = 3. Следваният път ще бъде (0 0) -- (0 1) -- (0 2) -- (1 2) -- (2 2) -- (2 1) -- (2 0) -- (1 0) -- (1 1). В този момент всички квадрати са посетени и е обърнат надясно.
Примери:
Input : R = 1 C = 1 Output : Right Input : R = 2 C = 2 Output : Left Input : R = 3 C = 1 Output : Down Input : R = 3 C = 3 Output : Right
Просто решение: Едно просто решение за този проблем е да направите R x C матрицата инициализирана с нула и да я обходите в спираловидна форма и да вземете променлива „Dir“, която казва текущата посока. Всеки път, когато сме в края на който и да е ред или колона, поемете надясно и променете стойността на „Dir“ според текущата си посока. Сега следвайте дадените условия:
- Ако пресичате горния ред, текущата ви посока е надясно.
- Ако сте в дясната колона, тогава текущата ви посока е надолу.
- Ако преминавате през долния ред, текущата ви посока е наляво.
- Ако пресичате лявата колона, текущата ви посока е нагоре.
Когато стигнем до последния квадрат, просто отпечатайте текущата посока, т.е. стойност на променливата "Dir".
Времевата и пространствена сложност за този проблем е O(R x C) и това ще работи само за малки стойности на R C, но тук R и C са твърде големи, така че създаването на R x C матрица не е възможно за твърде големи стойности на R и C.
пълна форма на iskcon
Ефикасен подход: Този подход изисква малко наблюдение и малко работа с писалка. Тук трябва да разгледаме всички възможни случаи за R и C, тогава просто трябва да поставим условие IF за всички възможни случаи. Ето ни с всички възможни условия:
- R != C и R е четно, а C е нечетно и R
- R != C и R е нечетно, а C е четно и R
- R != C и R е четно и C е четно и R
- R != C и R е нечетно и C е нечетно и R
- R != C и R е четно, а C е нечетно и посоката R>C ще бъде надолу.
- R != C и R е нечетно, а C е четно и R>C посоката ще бъде нагоре.
- R != C и R е четен и C е четен и R>C посоката ще бъде нагоре.
- R != C и R е нечетно и C е нечетно и R>C посоката ще бъде надолу.
- R == C и R е четен, а C е четен, посоката ще бъде наляво.
- R == C и R е нечетно, а C е нечетно, посоката ще бъде дясна.
- R != C и R е нечетно, а C е четно и R
По-долу е изпълнението на горната идея.
C++// C++ program to tell the Current direction in // R x C grid #include using namespace std; typedef long long int ll; // Function which tells the Current direction void direction(ll R ll C) { if (R != C && R % 2 == 0 && C % 2 != 0 && R < C) { cout << 'Left' << endl; return; } if (R != C && R % 2 != 0 && C % 2 == 0 && R > C) { cout << 'Up' << endl; return; } if (R == C && R % 2 != 0 && C % 2 != 0) { cout << 'Right' << endl; return; } if (R == C && R % 2 == 0 && C % 2 == 0) { cout << 'Left' << endl; return; } if (R != C && R % 2 != 0 && C % 2 != 0 && R < C) { cout << 'Right' << endl; return; } if (R != C && R % 2 != 0 && C % 2 != 0 && R > C) { cout << 'Down' << endl; return; } if (R != C && R % 2 == 0 && C % 2 == 0 && R < C) { cout << 'Left' << endl; return; } if (R != C && R % 2 == 0 && C % 2 == 0 && R > C) { cout << 'Up' << endl; return; } if (R != C && R % 2 == 0 && C % 2 != 0 && R > C) { cout << 'Down' << endl; return; } if (R != C && R % 2 != 0 && C % 2 == 0 && R < C) { cout << 'Right' << endl; return; } } // Driver program to test the Cases int main() { ll R = 3 C = 1; direction(R C); return 0; }
C // C program to tell the Current direction in // R x C grid #include typedef long long int ll; // Function which tells the Current direction void direction(ll R ll C) { if (R != C && R % 2 == 0 && C % 2 != 0 && R < C) { printf('Leftn'); return; } if (R != C && R % 2 != 0 && C % 2 == 0 && R > C) { printf('Upn'); return; } if (R == C && R % 2 != 0 && C % 2 != 0) { printf('Rightn'); return; } if (R == C && R % 2 == 0 && C % 2 == 0) { printf('Leftn'); return; } if (R != C && R % 2 != 0 && C % 2 != 0 && R < C) { printf('Rightn'); return; } if (R != C && R % 2 != 0 && C % 2 != 0 && R > C) { printf('Downn'); return; } if (R != C && R % 2 == 0 && C % 2 == 0 && R < C) { printf('Leftn'); return; } if (R != C && R % 2 == 0 && C % 2 == 0 && R > C) { printf('Upn');; return; } if (R != C && R % 2 == 0 && C % 2 != 0 && R > C) { printf('Downn'); return; } if (R != C && R % 2 != 0 && C % 2 == 0 && R < C) { printf('Rightn'); return; } } // Driver program to test the Cases int main() { ll R = 3 C = 1; direction(R C); return 0; } // This code is contributed by kothavvsaakash.
Java // Java program to tell the Current direction in // R x C grid import java.io.*; class GFG { // Function which tells the Current direction static void direction(int R int C) { if (R != C && R % 2 == 0 && C % 2 != 0 && R < C) { System.out.println('Left'); return; } if (R != C && R % 2 != 0 && C % 2 == 0 && R > C) { System.out.println('Up'); return; } if (R == C && R % 2 != 0 && C % 2 != 0) { System.out.println('Right'); return; } if (R == C && R % 2 == 0 && C % 2 == 0) { System.out.println('Left'); return; } if (R != C && R % 2 != 0 && C % 2 != 0 && R < C) { System.out.println('Right'); return; } if (R != C && R % 2 != 0 && C % 2 != 0 && R > C) { System.out.println('Down'); return; } if (R != C && R % 2 == 0 && C % 2 == 0 && R < C) { System.out.println('Left'); return; } if (R != C && R % 2 == 0 && C % 2 == 0 && R > C) { System.out.println('Up'); return; } if (R != C && R % 2 == 0 && C % 2 != 0 && R > C) { System.out.println('Down'); return; } if (R != C && R % 2 != 0 && C % 2 == 0 && R < C) { System.out.println('Right'); return; } } // Driver code public static void main(String[] args) { int R = 3 C = 1; direction(R C); } } // This code is contributed by KRV.
Python3 # Python3 program to tell the Current # direction in R x C grid # Function which tells the Current direction def direction(R C): if (R != C and R % 2 == 0 and C % 2 != 0 and R < C): print('Left') return if (R != C and R % 2 == 0 and C % 2 == 0 and R > C): print('Up') return if R == C and R % 2 != 0 and C % 2 != 0: print('Right') return if R == C and R % 2 == 0 and C % 2 == 0: print('Left') return if (R != C and R % 2 != 0 and C % 2 != 0 and R < C): print('Right') return if (R != C and R % 2 != 0 and C % 2 != 0 and R > C): print('Down') return if (R != C and R % 2 == 0 and C % 2 != 0 and R < C): print('Left') return if (R != C and R % 2 == 0 and C % 2 == 0 and R > C): print('Up') return if (R != C and R % 2 != 0 and C % 2 != 0 and R > C): print('Down') return if (R != C and R % 2 != 0 and C % 2 != 0 and R < C): print('Right') return # Driver code R = 3; C = 1 direction(R C) # This code is contributed by Shrikant13
C# // C# program to tell the Current // direction in R x C grid using System; class GFG { // Function which tells // the Current direction static void direction(int R int C) { if (R != C && R % 2 == 0 && C % 2 != 0 && R < C) { Console.WriteLine('Left'); return; } if (R != C && R % 2 != 0 && C % 2 == 0 && R > C) { Console.WriteLine('Up'); return; } if (R == C && R % 2 != 0 && C % 2 != 0) { Console.WriteLine('Right'); return; } if (R == C && R % 2 == 0 && C % 2 == 0) { Console.WriteLine('Left'); return; } if (R != C && R % 2 != 0 && C % 2 != 0 && R < C) { Console.WriteLine('Right'); return; } if (R != C && R % 2 != 0 && C % 2 != 0 && R > C) { Console.WriteLine('Down'); return; } if (R != C && R % 2 == 0 && C % 2 == 0 && R < C) { Console.WriteLine('Left'); return; } if (R != C && R % 2 == 0 && C % 2 == 0 && R > C) { Console.WriteLine('Up'); return; } if (R != C && R % 2 == 0 && C % 2 != 0 && R > C) { Console.WriteLine('Down'); return; } if (R != C && R % 2 != 0 && C % 2 == 0 && R < C) { Console.WriteLine('Right'); return; } } // Driver code static public void Main () { int R = 3 C = 1; direction(R C); } } // This code is contributed by m_kit
PHP // PHP program to tell the Current // direction in R x C grid // Function which tells // the Current direction function direction($R $C) { if ($R != $C && $R % 2 == 0 && $C % 2 != 0 && $R < $C) { echo 'Left' 'n'; return; } if ($R != $C && $R % 2 != 0 && $C % 2 == 0 && $R > $C) { echo 'Up' 'n'; return; } if ($R == $C && $R % 2 != 0 && $C % 2 != 0) { echo 'Right' 'n'; return; } if ($R == $C && $R % 2 == 0 && $C % 2 == 0) { echo 'Left' 'n'; return; } if ($R != $C && $R % 2 != 0 && $C % 2 != 0 && $R < $C) { echo 'Right' 'n'; return; } if ($R != $C && $R % 2 != 0 && $C % 2 != 0 && $R > $C) { echo 'Down' 'n'; return; } if ($R != $C && $R % 2 == 0 && $C % 2 == 0 && $R < $C) { echo 'Left' 'n'; return; } if ($R != $C && $R % 2 == 0 && $C % 2 == 0 && $R > $C) { echo 'Up' 'n'; return; } if ($R != $C && $R % 2 == 0 && $C % 2 != 0 && $R > $C) { echo 'Down' 'n'; return; } if ($R != $C && $R % 2 != 0 && $C % 2 == 0 && $R < $C) { echo 'Right' 'n'; return; } } // Driver Code $R = 3; $C = 1; direction($R $C); // This code is contributed by aj_36 ?>
JavaScript <script> // Javascript program to tell the Current // direction in R x C grid // Function which tells // the Current direction function direction(R C) { if (R != C && R % 2 == 0 && C % 2 != 0 && R < C) { document.write('Left'); return; } if (R != C && R % 2 != 0 && C % 2 == 0 && R > C) { document.write('Up'); return; } if (R == C && R % 2 != 0 && C % 2 != 0) { document.write('Right'); return; } if (R == C && R % 2 == 0 && C % 2 == 0) { document.write('Left'); return; } if (R != C && R % 2 != 0 && C % 2 != 0 && R < C) { document.write('Right'); return; } if (R != C && R % 2 != 0 && C % 2 != 0 && R > C) { document.write('Down'); return; } if (R != C && R % 2 == 0 && C % 2 == 0 && R < C) { document.write('Left'); return; } if (R != C && R % 2 == 0 && C % 2 == 0 && R > C) { document.write('Up'); return; } if (R != C && R % 2 == 0 && C % 2 != 0 && R > C) { document.write('Down'); return; } if (R != C && R % 2 != 0 && C % 2 == 0 && R < C) { document.write('Right'); return; } } let R = 3 C = 1; direction(R C); </script>
Изход
Down
Времева сложност: O(1)
Помощно пространство: O(1)
Тази статия е прегледана от екип GeeksforGeeks.
низ за char в java