fork(2) download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void print_position(int x, int y);
  5.  
  6. void print_maze(char **maze, int largura, int altura);
  7.  
  8. int labirinto(int x_atual, int y_atual, char **maze, int largura, int altura) {
  9. int imaior = x_atual;
  10. int imenor = x_atual;
  11. int ybaixo = y_atual;
  12. int ycima = y_atual;
  13.  
  14. while (imaior < largura - 1) {
  15. if (maze[x_atual + 1][y_atual] != 'X' && maze[x_atual + 1][y_atual] != 'P') {
  16. maze[x_atual][y_atual] = 'P';
  17. x_atual += 1;
  18. }
  19. imaior++;
  20. }
  21.  
  22. while (imenor > 0) {
  23. if (maze[x_atual - 1][y_atual] != 'X' && maze[x_atual - 1][y_atual] != 'P') {
  24. maze[x_atual][y_atual] = 'P';
  25. x_atual -= 1;
  26. }
  27. imenor--;
  28. }
  29.  
  30. while (ycima > 0) {
  31. if (maze[x_atual][y_atual - 1] != 'X' && maze[x_atual][y_atual - 1] != 'P') {
  32. maze[x_atual][y_atual] = 'P';
  33. y_atual -= 1;
  34. }
  35. ycima--;
  36. }
  37.  
  38. while (ybaixo < altura - 1) {
  39. if (maze[x_atual][y_atual + 1] != 'X' && maze[x_atual][y_atual + 1] != 'P') {
  40. maze[x_atual][y_atual] = 'P';
  41. y_atual += 1;
  42. }
  43. ybaixo++;
  44. }
  45.  
  46. maze = labirinto(x_atual, y_atual, maze, largura, altura);
  47. }
  48.  
  49. int main(void) {
  50. int largura, altura, x_saida, y_saida, x, y;
  51. scanf("%d %d\n", &largura, &altura);
  52. char **a = malloc(largura * sizeof(char*));
  53. for (x = 0; x < largura; x++) {
  54. a[x] = malloc(altura * sizeof(char));
  55. }
  56. for (y = altura - 1; y >= 0; y--) {
  57. for (x = 0; x < largura; x++) {
  58. a[x][y] = getchar();
  59. if (a[x][y] == 'S') {
  60. x_saida = x;
  61. y_saida = y;
  62. }
  63. }
  64. getchar(); //pegar a quebra de linha
  65. }
  66. print_maze(a, largura, altura);
  67. //eu acredito que seja mais facil comecar a busca pela saida
  68. labirinto(x_saida, y_saida, a, largura, altura);
  69. printf("\n");
  70. return 0;
  71. }
  72.  
  73. void print_maze(char **maze, int largura, int altura) {
  74. int x, y;
  75. for (y = altura - 1; y >= 0; y--) {
  76. for (x = 0; x < largura; x++) {
  77. printf("%c", maze[x][y]);
  78. }
  79. printf("\n");
  80. }
  81. }
  82.  
  83. void print_position(int x, int y) {
  84. printf("(%d, %d)", x, y);
  85. }
Time limit exceeded #stdin #stdout 5s 10304KB
stdin
5 6
XOSXX
OOOXX
OXXXX
OXXOX
OXXOX
OOOEX
stdout
Standard output is empty