• J


    J - 迷宫问题

    Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u

    Description

    定义一个二维数组: 
    int maze[5][5] = {
    
    0, 1, 0, 0, 0,
    0, 1, 0, 1, 0,
    0, 0, 0, 0, 0,
    0, 1, 1, 1, 0,
    0, 0, 0, 1, 0,
    };

    它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

    Input

    一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。

    Output

    左上角到右下角的最短路径,格式如样例所示。

    Sample Input

    0 1 0 0 0
    0 1 0 1 0
    0 0 0 0 0
    0 1 1 1 0
    0 0 0 1 0

    Sample Output

    (0, 0) (1, 0) (2, 0) (2, 1) (2, 2) (2, 3) (2, 4) (3, 4) (4, 4)

    //就是最最基础的bfs

     

     1 #include <iostream>
     2 #include <string.h>
     3 using namespace std;
     4 
     5 int map[5][5];
     6 int ans[5][5];
     7 int num=99999;
     8 
     9 void read_map()
    10 {
    11     memset(map,0,25*sizeof(int));
    12     memset(ans,0,25*sizeof(int));
    13     for (int i=0;i<5;i++)
    14     {
    15         for (int j=0;j<5;j++)
    16         {
    17             cin>>map[i][j];
    18         }
    19     }
    20 }
    21 
    22 void copy_map()
    23 {
    24     for (int i=0;i<5;i++)
    25     {
    26         for (int j=0;j<5;j++)
    27         {
    28             ans[i][j]=map[i][j];
    29         }
    30     }
    31 }
    32 
    33 void find_way(int x,int y,int all)
    34 {
    35     map[x][y]=2;
    36     if (x==4&&y==4&&all<=num)
    37     {
    38         copy_map();//复制到ans里去;
    39         num=all;
    40         map[x][y]=0;
    41     }
    42     else
    43     {
    44         if (x+1<5&&map[x+1][y]==0) find_way(x+1,y,all+1);
    45         if (y+1<5&&map[x][y+1]==0) find_way(x,y+1,all+1);
    46         if (x-1>-1&&map[x-1][y]==0) find_way(x-1,y,all+1);
    47         if (y-1>-1&&map[x][y-1]==0) find_way(x,y-1,all+1);
    48         map[x][y]=0;
    49     }
    50 }
    51 
    52 void show_ans(int x,int y)
    53 {
    54     ans[x][y]=0;
    55     if (x==4&&y==4)
    56     {
    57         cout<<"("<<x<<", "<<y<<")"<<endl;
    58         return;
    59     }
    60     else
    61     {
    62         if (x+1<5&&ans[x+1][y]==2)
    63         {
    64             cout<<"("<<x<<", "<<y<<")"<<endl;
    65             show_ans(x+1,y);
    66         }
    67         if (y+1<5&&ans[x][y+1]==2)
    68         {
    69             cout<<"("<<x<<", "<<y<<")"<<endl;
    70             show_ans(x,y+1);
    71         }
    72         if (x-1>-1&&ans[x-1][y]==2)
    73         {
    74             cout<<"("<<x<<", "<<y<<")"<<endl;
    75             show_ans(x-1,y);
    76         }
    77         if (y-1>-1&&ans[x][y-1]==2)
    78         {
    79             cout<<"("<<x<<", "<<y<<")"<<endl;
    80             show_ans(x,y-1);
    81         }
    82     }
    83 }
    84 
    85 int main()
    86 {
    87     read_map();
    88     find_way(0,0,0);
    89     show_ans(0,0);
    90     return 0;
    91 }
    View Code

     

     

     

     

  • 相关阅读:
    C语言 realloc为什么要有返回值,realloc返回值具体解释/(解决随意长度字符串输入问题)。
    opencv中的vs框架中的Blob Tracking Tests的中文注释。
    Java实现 蓝桥杯VIP 算法提高 棋盘多项式
    Java实现 蓝桥杯VIP 算法提高 棋盘多项式
    Java实现 蓝桥杯VIP 算法提高 棋盘多项式
    Java实现 蓝桥杯VIP 算法提高 棋盘多项式
    Java实现 蓝桥杯VIP 算法提高 分苹果
    Java实现 蓝桥杯VIP 算法提高 分苹果
    Java实现 蓝桥杯VIP 算法提高 分苹果
    Java实现 蓝桥杯VIP 算法提高 分苹果
  • 原文地址:https://www.cnblogs.com/haoabcd2010/p/5676764.html
Copyright © 2020-2023  润新知