fork download
  1. #include <iostream>
  2. #include <cstdio>
  3. #define MAX_Y 10
  4. #define MAX_X 12
  5.  
  6. using namespace std;
  7.  
  8. int walk(int [MAX_Y][MAX_X],int ,int );
  9. void print(int [MAX_Y][MAX_X]);
  10.  
  11. int step=0;
  12.  
  13. int main(int argc, char *argv[]){
  14. int map[MAX_Y][MAX_X] = {1,1,1,1,1,1,1,1,1,1,1,1,
  15. 1,0,0,0,1,1,1,1,1,1,1,1,
  16. 1,1,1,0,1,1,0,0,0,0,1,1,
  17. 1,1,1,0,1,1,0,1,1,0,1,1,
  18. 1,1,1,0,0,0,0,1,1,0,1,1,
  19. 1,1,1,0,1,1,0,1,1,0,1,1,
  20. 1,1,1,0,1,1,0,1,1,0,1,1,
  21. 1,1,1,1,1,1,0,1,1,0,1,1,
  22. 1,1,0,0,0,0,0,0,1,0,0,1,
  23. 1,1,1,1,1,1,1,1,1,1,1,1}; //1 is wall, 0 is road.
  24.  
  25. printf("Map:\n");
  26. print(map);
  27. int sx=1,sy=1;
  28. walk(map,sx,sy);
  29. printf("\nResult:\n");
  30. print(map);
  31. printf("step count=%d",step);
  32.  
  33. return 0;
  34. }
  35.  
  36. int walk(int m[MAX_Y][MAX_X],int x, int y){
  37. if(m[y][x]==0 && m[MAX_Y-2][MAX_X-2]!=2){
  38.  
  39. m[y][x]=2; //walking
  40. step++;
  41.  
  42. if(m[MAX_Y-2][MAX_X-2]!=2){
  43. //printf("m[%d][%d]=%d ",y,x,m[y][x]); //Test
  44. if((!(walk(m,x+1,y)==0 || //right
  45. walk(m,x,y+1)==0 || //down
  46. walk(m,x-1,y)==0 || //left
  47. walk(m,x,y-1)==0)) && //up //if don't walking
  48. m[MAX_Y-2][MAX_X-2]!=2){
  49. m[y][x]=0;
  50. step--;
  51. return 1;
  52. }
  53. else
  54. return m[y][x];
  55. }
  56. }
  57. }
  58. void print(int m[MAX_Y][MAX_X]){
  59. for(int i=0;i<MAX_Y;i++){
  60. for(int j=0;j<MAX_X;j++){
  61. if(j!=0)
  62. printf(",");
  63. printf("%d",m[i][j]);
  64. }
  65. printf("\n");
  66. }
  67. }
Runtime error #stdin #stdout 0s 3468KB
stdin
Standard input is empty
stdout
Standard output is empty