zoukankan      html  css  js  c++  java
  • 题目:迷宫路径

    题目描述

    猩猩来到一个点(1,1),想吃右下角(N,N)的香蕉,规定只能往下走或者往右走,试问有多少种走法?

    输入格式

    第一行为一个整数N(N<=20)
    以下是一个N*N的正方形表示迷宫

    输出格式

    仅有一个数,表示路径总数,如果走不通,则输出0

    题解:———————————————————————————————————————————————————

    本题有两种解法,第一种就是dfs,但我以身试法,有一个点不能过,超时!但对于新手来说,这种方法是不得不掌握的。

    DFS代码实现:

    #include<iostream>
    using namespace std;

    int total=0,n,map[21][21];

    void dfs(int p,int q){
         if(q==n&&p==n) {total++;return ;}
        
         if(p+1<=n&&q<=n&&map[p+1][q]==0)
         dfs(p+1,q);

         if(q+1<=n&&p<=n&&map[p][q+1]==0)
         dfs(p,q+1);  
         }

    int main()
    {
        int i,j,k;
        cin>>n;
        for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        cin>>map[i][j];
        dfs(1,1);
       
        cout<<total<<endl;
        return 0;
       
        }

    解法二是递推,吧杨辉三角改改就行了。

    代码实现:

    #include<iostream>
    using namespace std;

    int n,map[21][21],f[21][21];

    int main()
    {
        int i,j,k;
        cin>>n;
        for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        cin>>map[i][j];
       
        if(map[1][1]==1) {cout<<0<<endl;return 0;}
       
        memset(f,0,sizeof(f));
        f[1][1]=1;
     
        for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        if(map[i][j]!=1) if(i!=1||j!=1) f[i][j]=f[i-1][j]+f[i][j-1];
       
        cout<<f[n][n]<<endl;
       
        system("pause");
        return 0;
       
        }

  • 相关阅读:
    20210805-接口测试实战(持续更新中···)
    2021-07-06:关于自动化测试
    学习记录-更新时间-2021-04-09
    知识点@解决端口被占用的问题
    PS学习笔记
    JS去掉数组中重复的数
    验证码倒计时
    统计数组中出现最多的字母及次数
    验证码倒计时js
    小兔鲜css
  • 原文地址:https://www.cnblogs.com/noip/p/2290776.html
Copyright © 2011-2022 走看看