zoukankan      html  css  js  c++  java
  • 老鼠走迷宫(1)输出唯一路径(C语言)

    需求  

      有一个迷宫,在迷宫的某个出口放着一块奶酪。将一只老鼠由某个入口处放进去,它必须穿过迷宫,找到奶酪。请找出它的行走路径。

    STEP 1 题目转化

      我们用一个二维数组来表示迷宫,用2表示迷宫的墙壁,用0表示通路。
      老鼠每走到一个格子的时候就将该位置的值置为1,表示老鼠的行走路径包括这个格子。 

    STEP 2 编程思路

      ⑴这个题目可以用递归方法,只需要最后一步走到迷宫出口所在的格子。

      ⑵每一步测试上、下、左、右四个方向,选择一个方向前进。

    STEP 3 要点整理

      ⑴走过的格子需要标记,否则无法输出路径。

      ⑵递归算法只需弄清递归出口(即结束条件)和分解后的问题,切忌想得太深太远。

    ----------------------------------华丽丽的分割线---------------------------代码君要出场了-------------------

     1 #include <stdio.h>
     2 
     3 int maze[9][9] = {
     4     {2, 2, 2, 2, 2, 2, 2, 2, 2},
     5     {0, 0, 2, 2, 2, 2, 0, 2, 2},
     6     {2, 0, 0, 0, 0, 0, 0, 0, 2},
     7     {2, 0, 2, 2, 0, 2, 2, 0, 2},
     8     {0, 2, 0, 2, 0, 2, 2, 0, 2},
     9     {2, 2, 0, 2, 0, 2, 2, 0, 2},
    10     {2, 2, 0, 2, 0, 0, 0, 0, 2},
    11     {2, 2, 0, 2, 0, 2, 2, 2, 2},
    12     {2, 2, 2, 2, 0, 2, 2, 2, 2},
    13 };                                          //构建迷宫
    14 
    15 int start_x = 1, start_y = 0;               //设置起点
    16 int end_x = 8, end_y = 4;                   //设置终点
    17 int success = 0;
    18 
    19 int step(int x, int y);
    20 
    21 int main(int argc, char argv[])
    22 {
    23     int x, y;    
    24 
    25     printf("maze:
    ");                    //打印迷宫图,为方便查看,将数字换为图形打印
    26     for(x = 0; x < 9; x++)
    27     {
    28         for(y = 0; y < 9; y++)
    29         {
    30             if(maze[x][y] == 2)
    31                 printf("");
    32             else
    33                 printf("");
    34         }
    35         printf("
    ");
    36     }
    37 
    38     if(step(start_x, start_y) == 0)
    39     {
    40         printf("No way!
    ");
    41     }
    42     else
    43     {
    44         printf("You are free!
    ");
    45     
    46         for(x = 0; x < 9; x++)
    47         {
    48             for(y = 0; y < 9; y++)
    49             {
    50                 if(maze[x][y] == 2)
    51                     printf("");
    52                 else if(maze[x][y] == 1) 
    53                     printf("");
    54                 else
    55                     printf("");
    56             }
    57         printf("
    ");
    58         }
    59     }
    60 
    61     printf("
    ");
    62     return 0;
    63 }
    64 
    65 
    66 int step(int x, int y)           //用递归算法求解路径                 
    67 {
    68     maze[x][y] = 1;
    69 
    70     if(x == end_x && y == end_y)
    71     {
    72         success = 1;
    73     }
    74 
    75     if(success != 1 && y < (LEN - 1) && maze[x][y + 1] == 0){step(x, y + 1);}
    76     if(success != 1 && x > 0 && maze[x][y - 1] == 0){step(x, y - 1);}
    77     if(success != 1 && x < (LEN - 1) && maze[x + 1][y] == 0){step(x + 1, y);}
    78     if(success != 1 && y > 0 && maze[x - 1][y] == 0){step(x - 1, y);}
    79 
    80     if(success != 1)
    81     {
    82         maze[x][y] = 0;
    83     }
    84 
    85     return success;
    86 }

    欢迎转载,请备注原始连接http://www.cnblogs.com/liuliuliu/p/3885026.html,并注明转载。

    作者bibibi_liuliu,联系方式395985239@qq.com

  • 相关阅读:
    2019.4.18 淘宝商品显示块2号铺设练习
    Debuggee not connected 寒江孤钓<<windows 内核安全编程>> 学习笔记
    指定的服务已标记为删除 寒江孤钓<<windows 内核安全编程>> 学习笔记
    删除自定义服务 寒江孤钓<<windows 内核安全编程>> 学习笔记
    发生系统错误 1275.此驱动程序被阻止加载 寒江孤钓<<windows 内核安全编程>> 学习笔记
    无法编译出.sys文件 寒江孤钓<<windows 内核安全编程>> 学习笔记
    iOS11 适配
    curl
    ddd
    201060512 viewcontroller view
  • 原文地址:https://www.cnblogs.com/liuliuliu/p/3885026.html
Copyright © 2011-2022 走看看