6_5.C
上传用户:wyn840322
上传日期:2007-01-13
资源大小:294k
文件大小:2k
源码类别:

数据结构

开发平台:

C/C++

  1. /* ======================================== */
  2. /*    程式实例: 6_5.c                       */
  3. /*    应用递归来走迷宫                      */
  4. /*    数字 0: 表示是可走的路                */
  5. /*    数字 1: 表示是墙壁,不可走的路         */
  6. /*    数字 2: 标示是走过的路                */
  7. /* ======================================== */
  8. int maze[7][10] = {               /* 迷宫的数组           */
  9.          1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  10.          1, 0, 1, 0, 1, 0, 0, 0, 0, 1,
  11.          1, 0, 1, 0, 1, 0, 1, 1, 0, 1,
  12.          1, 0, 1, 0, 1, 1, 1, 0, 0, 1,
  13.          1, 0, 1, 0, 0, 0, 0, 0, 1, 1,
  14.          1, 0, 0, 0, 1, 1, 1, 0, 0, 1,
  15.          1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
  16. /* ---------------------------------------- */
  17. /*  走迷宫的递归函数                        */
  18. /* ---------------------------------------- */
  19. int find_path(int x,int y)
  20. {
  21.    if ( x == 1 && y == 1 )        /* 是否是迷宫出口       */
  22.    {
  23.       maze[x][y] = 2;             /* 记录最后走过的路     */
  24.       return 1;
  25.    }
  26.    else
  27.       if ( maze[x][y] == 0 )      /* 是不是可以走         */
  28.       {
  29.          maze[x][y] = 2;          /* 记录己经走过的路     */
  30.          if ( ( find_path(x - 1,y) +  /* 调用递归函数往上 */
  31.                 find_path(x + 1,y) +  /* 往下             */
  32.                 find_path(x,y - 1) +  /* 往左             */
  33.                 find_path(x,y + 1) ) > 0 )  /* 往右       */
  34.             return 1;
  35.          else
  36.          {
  37.             maze[x][y] = 0;       /* 此路不通取消记号     */
  38.             return 0;
  39.          }
  40.       }
  41.       else
  42.          return 0;
  43. }
  44. /* ---------------------------------------- */
  45. /*  主程式: 用递归的方法在数组迷宫找出口.   */
  46. /* ---------------------------------------- */
  47. void main()
  48. {
  49.    int i,j;
  50.    find_path(5,8);                /* 调用递归函数         */
  51.    printf("迷宫的路径如下图所示:n");
  52.    for ( i = 1; i < 6; i++)       /* 印出迷宫的图形       */
  53.    {
  54.       for ( j = 1; j < 9; j++)
  55.          printf("%d",maze[i][j]); /* 印出各座标           */
  56.       printf("n");               /* 换行                 */
  57.    }
  58. }