fork download
  1. #include <stdio.h>
  2.  
  3. int x, y, awal_i, awal_j, akhir_i, akhir_j, min = 20 * 20, tanda = 0;
  4. char maze[20][20];
  5.  
  6. void minimum_maze(int a, int b, int step); // jarak minimum
  7. void cetak_maze(int a, int b, int step); // cetak jarak minimum
  8.  
  9. int main()
  10. {
  11. scanf("%d %d", &x, &y);
  12. for (int i = 1; i <= y; i++)
  13. {
  14. for (int j = 1; j <= x; j++)
  15. {
  16. scanf(" %c", &maze[i][j]);
  17. if (maze[i][j] == 'A')
  18. {
  19. awal_i = i;
  20. awal_j = j;
  21. }
  22. if (maze[i][j] == 'B')
  23. {
  24. akhir_i = i;
  25. akhir_j = j;
  26. }
  27. }
  28. }
  29. minimum_maze(awal_i, awal_j, 0);
  30. cetak_maze(awal_i, awal_j, 0);
  31. }
  32.  
  33. void minimum_maze(int a, int b, int step)
  34. {
  35. if (a < 0 || b < 0 || a > y || b > x)
  36. {
  37. return;
  38. }
  39. if (maze[a][b] == '#')
  40. {
  41. return;
  42. }
  43. if (a == akhir_i && b == akhir_j)
  44. {
  45. if (step < min)
  46. {
  47. min = step;
  48. }
  49. }
  50. maze[a][b] = '#';
  51. minimum_maze(a - 1, b, step + 1);
  52. minimum_maze(a + 1, b, step + 1);
  53. minimum_maze(a, b - 1, step + 1);
  54. minimum_maze(a, b + 1, step + 1);
  55. maze[a][b] = '.';
  56. }
  57.  
  58. void cetak_maze(int a, int b, int step)
  59. {
  60. if (tanda)
  61. {
  62. return;
  63. }
  64. if (a < 0 || b < 0 || a > y || b > x)
  65. {
  66. return;
  67. }
  68. if (maze[a][b] == '#' || maze[a][b] == 'x')
  69. {
  70. return;
  71. }
  72. maze[a][b] = 'x';
  73. cetak_maze(a - 1, b, step + 1);
  74. cetak_maze(a + 1, b, step + 1);
  75. cetak_maze(a, b - 1, step + 1);
  76. cetak_maze(a, b + 1, step + 1);
  77. maze[a][b] = '.';
  78. if (a == akhir_i && b == akhir_j)
  79. {
  80. if (step != min)
  81. {
  82. return;
  83. }
  84. for (int i = 1; i <= y; i++)
  85. {
  86. for (int j = 1; j <= x; j++)
  87. {
  88. if (i == awal_i && j == awal_j)
  89. {
  90. printf("A");
  91. }
  92. else if (i == akhir_i && j == akhir_j)
  93. {
  94. printf("B");
  95. }
  96. else
  97. {
  98. printf("%c", maze[i][j]);
  99. }
  100. if (j == x)
  101. {
  102. printf("\n");
  103. }
  104. }
  105. }
  106. tanda = 1;
  107. }
  108. }
Success #stdin #stdout 0.03s 5672KB
stdin
15 15
###############
##B.....#######
#######......##
#######......##
##......#######
##......#######
#######......##
#######......##
##......#######
##......#######
#######......##
#######......##
##......#######
##..........A##
###############
stdout
###############
##Bxxxxx#######
#######x.....##
#######x.....##
##.....x#######
##.....x#######
#######x.....##
#######x.....##
##.....x#######
##.....x#######
#######x.....##
#######x.....##
##.....x#######
##.....xxxxxA##
###############