Donat un 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.
Per exemple: Considereu el cas de R = 3 C = 3. El camí seguit serà (0 0) -- (0 1) -- (0 2) -- (1 2) -- (2 2) -- (2 1) -- (2 0) -- (1 0) -- (1 1). En aquest punt s'han visitat totes les places i està orientada a la dreta.
llista buida java
Exemples:
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
Solució senzilla: Una solució senzilla per a aquest problema és fer que la matriu R x C s'inicialitzi amb zero i travessar-la en forma d'espiral i prendre una variable 'Dir' que indiqui la direcció actual. Sempre que estem al final de qualsevol fila i columna, agafeu la dreta i canvieu el valor de "Dir" segons la vostra direcció actual. Ara seguiu les condicions donades:
- Si esteu travessant la fila superior, la vostra direcció actual és la dreta.
- Si sou la columna dreta, la vostra direcció actual és cap avall.
- Si esteu travessant la fila inferior, la vostra direcció actual és Esquerra.
- Si esteu travessant la columna de l'esquerra, la vostra direcció actual és amunt.
Quan arribem a l'últim quadrat, només cal imprimir la direcció actual, és a dir; valor de la variable 'Dir'.
La complexitat de temps i espai per a aquest problema és O (R x C) i això només funcionarà per a valors petits de R C, però aquí R i C són massa grans, de manera que no és possible crear una matriu R x C per a valors massa grans de R i C.
la sessió ha caducat
Enfocament eficient: Aquest enfocament requereix poca observació i una mica de paper de ploma. Aquí hem de considerar tots els casos possibles per a R i C, llavors només hem de posar la condició IF per a tots els casos possibles. Aquí estem amb totes les condicions possibles:
- R != C i R és parell i C és senar i R
- R != C i R és senar i C és parell i R
- R != C i R és parell i C és parell i R
- R != C i R és senar i C és senar i R
- R != C i R és parell i C és senar i la direcció R>C serà avall.
- R != C i R és senar i C és parell i la direcció R>C serà amunt.
- R != C i R és parell i C és parell i la direcció R>C serà amunt.
- R != C i R és senar i C és senar i la direcció R>C serà avall.
- R == C i R és parell i C és parell la direcció serà Esquerra.
- R == C i R és senar i C és senar, la direcció serà la dreta.
- R != C i R és senar i C és parell i R
A continuació es mostra la implementació de la idea anterior.
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>
Sortida
Down
Complexitat temporal: O(1)
Espai auxiliar: O(1)
Aquest article ha estat revisat per l'equip GeeksforGeeks.