zoukankan      html  css  js  c++  java
  • 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

     

     

     

     

  • 相关阅读:
    软件工程第三次个人作业——最大连续子数组和
    LeetCode(258.各位相加)的思路及解决过程
    VS2017中对C++的单元测试
    对大学三年学习生活的总结与反思
    软件工程 实验四 代码评审
    软件工程 实验二
    2020软件工程最后一次作业
    软件工程第四次作业(第二次结对)
    软件工程第三次作业
    软件工程第二次作业:最大字段和
  • 原文地址:https://www.cnblogs.com/haoabcd2010/p/5676764.html
Copyright © 2011-2022 走看看