fork download
  1. #include<stdio.h>
  2.  
  3. // test
  4.  
  5. int main (void)
  6. {
  7. int g[5][5] =
  8. {
  9. { 1,0,0,0,0 },
  10. { 0,0,1,0,0 },
  11. { 0,1,1,1,1 },
  12. { 1,0,1,0,0 },
  13. { 0,0,0,1,0 }
  14. };
  15.  
  16. printf("\n 4-way solution = %d \n", mmd4(5,5,g, 2,2));
  17. printf("\n 8-way solution = %d \n", mmd8(5,5,g, 2,2));
  18.  
  19. return 0;
  20. }
  21.  
  22. // 8-way Solution
  23.  
  24. int mmd8(int h, int w, int g[h][w], int x, int y)
  25. {
  26. putchar('#');
  27. return max8(mmd8_up (h,w,g,x-1,y ,1),
  28. mmd8_down (h,w,g,x+1,y ,1),
  29. mmd8_left (h,w,g,x ,y-1,1),
  30. mmd8_right(h,w,g,x ,y+1,1),
  31.  
  32. mmd8_uleft (h,w,g,x-1,y-1,1),
  33. mmd8_uright(h,w,g,x-1,y+1,1),
  34. mmd8_dleft (h,w,g,x+1,y-1,1),
  35. mmd8_dright(h,w,g,x+1,y+1,1));
  36. }
  37.  
  38. int mmd8_up(int h, int w, int g[h][w], int x, int y, int steps)
  39. {
  40. if (base_case(h,w,x,y)) return 0;
  41. putchar('U');
  42. return max4(g[x][y]?steps:0,
  43. mmd8_up (h,w,g,x-1,y ,steps+1),
  44. mmd8_uleft (h,w,g,x-1,y-1,steps+1),
  45. mmd8_uright(h,w,g,x-1,y+1,steps+1));
  46. }
  47.  
  48. int mmd8_down(int h, int w, int g[h][w], int x, int y, int steps)
  49. {
  50. if (base_case(h,w,x,y)) return 0;
  51. putchar('D');
  52. return max4(g[x][y]?steps:0,
  53. mmd8_down (h,w,g,x+1,y ,steps+1),
  54. mmd8_dleft (h,w,g,x+1,y-1,steps+1),
  55. mmd8_dright(h,w,g,x+1,y+1,steps+1));
  56. }
  57.  
  58. int mmd8_left(int h, int w, int g[h][w], int x, int y, int steps)
  59. {
  60. if (base_case(h,w,x,y)) return 0;
  61. putchar('L');
  62. return max2(g[x][y]?steps:0,
  63. mmd8_left (h,w,g,x ,y-1,steps+1),
  64. mmd8_uleft(h,w,g,x-1,y-1,steps+1),
  65. mmd8_dleft(h,w,g,x+1,y-1,steps+1));
  66. }
  67.  
  68. int mmd8_right(int h, int w, int g[h][w], int x, int y, int steps)
  69. {
  70. if (base_case(h,w,x,y)) return 0;
  71. putchar('R');
  72. return max2(g[x][y]?steps:0,
  73. mmd8_right (h,w,g,x ,y+1,steps+1),
  74. mmd8_uright(h,w,g,x-1,y+1,steps+1),
  75. mmd8_dright(h,w,g,x+1,y+1,steps+1));
  76. }
  77.  
  78. int mmd8_uleft(int h, int w, int g[h][w], int x, int y, int steps)
  79. {
  80. if (base_case(h,w,x,y)) return 0;
  81. putchar('W');
  82. return max2(g[x][y]?steps:0,
  83. mmd8_uleft(h,w,g,x-1,y-1,steps+1));
  84. }
  85.  
  86. int mmd8_uright(int h, int w, int g[h][w], int x, int y, int steps)
  87. {
  88. if (base_case(h,w,x,y)) return 0;
  89. putchar('X');
  90. return max2(g[x][y]?steps:0,
  91. mmd8_uright(h,w,g,x-1,y+1,steps+1));
  92. }
  93.  
  94. int mmd8_dleft(int h, int w, int g[h][w], int x, int y, int steps)
  95. {
  96. if (base_case(h,w,x,y)) return 0;
  97. putchar('Y');
  98. return max2(g[x][y]?steps:0,
  99. mmd8_dleft(h,w,g,x+1,y-1,steps+1));
  100. }
  101.  
  102. int mmd8_dright(int h, int w, int g[h][w], int x, int y, int steps)
  103. {
  104. if (base_case(h,w,x,y)) return 0;
  105. putchar('Z');
  106. return max2(g[x][y]?steps:0,
  107. mmd8_dright(h,w,g,x+1,y+1,steps+1));
  108. }
  109.  
  110. // 4-way Solution
  111.  
  112. int mmd4(int h, int w, int g[h][w], int x, int y)
  113. {
  114. putchar('#');
  115. return max4(mmd_up (h,w,g,x-1,y ,1),
  116. mmd_down (h,w,g,x+1,y ,1),
  117. mmd_left (h,w,g,x ,y-1,1),
  118. mmd_right(h,w,g,x ,y+1,1));
  119. }
  120.  
  121. int mmd_up(int h, int w, int g[h][w], int x, int y, int steps)
  122. {
  123. if (base_case(h,w,x,y)) return 0;
  124. putchar('U');
  125. return max4(g[x][y]?steps:0,
  126. mmd_up (h,w,g,x-1,y ,steps+1),
  127. mmd_left (h,w,g,x ,y-1,steps+1),
  128. mmd_right(h,w,g,x ,y+1,steps+1));
  129. }
  130.  
  131. int mmd_down(int h, int w, int g[h][w], int x, int y, int steps)
  132. {
  133. if (base_case(h,w,x,y)) return 0;
  134. putchar('D');
  135. return max4(g[x][y]?steps:0,
  136. mmd_down (h,w,g,x+1,y ,steps+1),
  137. mmd_left (h,w,g,x ,y-1,steps+1),
  138. mmd_right(h,w,g,x ,y+1,steps+1));
  139. }
  140.  
  141. int mmd_left(int h, int w, int g[h][w], int x, int y, int steps)
  142. {
  143. if (base_case(h,w,x,y)) return 0;
  144. putchar('L');
  145. return max2(g[x][y]?steps:0,
  146. mmd_left (h,w,g,x ,y-1,steps+1));
  147. }
  148.  
  149. int mmd_right(int h, int w, int g[h][w], int x, int y, int steps)
  150. {
  151. if (base_case(h,w,x,y)) return 0;
  152. putchar('R');
  153. return max2(g[x][y]?steps:0,
  154. mmd_right(h,w,g,x ,y+1,steps+1));
  155. }
  156.  
  157. // Utility Functions
  158.  
  159. int base_case(int h, int w, int x, int y)
  160. {
  161. if (x < 0) return 1;
  162. if (y < 0) return 1;
  163. if (x >= h) return 1;
  164. if (y >= w) return 1;
  165. return 0;
  166. }
  167.  
  168. int max2(int a, int b)
  169. {
  170. return ((a > b) ? a : b);
  171. }
  172.  
  173. int max4(int a, int b, int c, int d)
  174. {
  175. int m = a;
  176. if (b > m) m = b;
  177. if (c > m) m = c;
  178. if (d > m) m = d;
  179. return m;
  180. }
  181.  
  182. int max8(int a, int b, int c, int d, int e, int f, int g, int h)
  183. {
  184. int m = a;
  185. if (b > m) m = b;
  186. if (c > m) m = c;
  187. if (d > m) m = d;
  188. if (e > m) m = e;
  189. if (f > m) m = f;
  190. if (g > m) m = g;
  191. if (h > m) m = h;
  192. return m;
  193. }
  194.  
Success #stdin #stdout 0s 2160KB
stdin
Standard input is empty
stdout
#RRLLDRRLLDRRLLURRLLURRLL
 4-way solution = 4 
#ZZYYXXWWRZXRLYWLDZYDUXWU
 8-way solution = 2