• (搜索)2753:走迷宫


    描述

    一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。
    给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,不能斜着走。

    输入

    第一行是两个整数,R和C,代表迷宫的长和宽。( 1<= R,C <= 40)
    接下来是R行,每行C个字符,代表整个迷宫。
    空地格子用'.'表示,有障碍物的格子用'#'表示。
    迷宫左上角和右下角都是'.'。

    输出

    输出从左上角走到右下角至少要经过多少步(即至少要经过多少个空地格子)。计算步数要包括起点和终点。

    样例输入

    5 5

    ..###

    #....

    #.#.#

    #.#.#

    #.#..

    样例输出

    9

    我の思考

    这个题目,假如你在一个方块上,你有四种走法,上,下,左,右分别走,

    设置一个走过的数组,来标记方块是否被经历过,用递归的方法,可以走完。

    我の代码

    #include <iostream>
    #include <string.h>
    using namespace std;
    char sym[101][41];
    bool visited[101][41];
    int num=9999;
    int width,height;
    int flag=0;
    
    
    void cal(int i,int j,int t){
    
        if(visited[i][j]==1 || sym[i][j]=='#' || i>height-1 || j>width-1 || i<0 || j<0)
            return;
        visited[i][j]=1;
    if(i==height-1&&j==width-1){
            flag=1;
            if(num > t) {
                num = t;
            }
            t=0;
            return;
        }
    
        cal(i,j+1,t+1);
        cal(i+1,j,t+1);
        cal(i,j-1,t+1);
        cal(i-1,j,t+1);
    }
    int main()
    {
        cin>>height>>width;
        memset(visited,0,sizeof(visited));
    
        for(int i=0;i<height;i++){
            for(int j=0;j<width;j++){
                cin>>sym[i][j];
            }
        }
    
        cal(0,0,1);
        if(flag==0){
            cout<<"No"<<endl;
        } else {
            cout<<num<<endl;
        }
    
        return 0;
    }
  • 相关阅读:
    微信支付开发
    dz插件开发(一) 从常用的常量 变量 函数开始
    收集bootstrap的几个常用用法---tooltip提示框
    ucenter接口
    php防止表单重复提交
    支付宝接口 CI上集成
    telnet模拟post 调试的时候很好用
    __call 实现函数方法不同参数个数的重载
    微赞的分页
    结合微赞发布家和小程序流程
  • 原文地址:https://www.cnblogs.com/rimochiko/p/7537896.html
Copyright © 2020-2023  润新知