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;
       
        }

  • 相关阅读:
    Ubuntu Server 17.04安装GNOME指令
    docker应用笔记
    无线网络连接配置
    bind9的一些配置
    关于linux下的文件权限
    命令行模式下设置时区
    Linux下SSL证书申请以及配置到Nginx
    编译安装Nginx到Linux
    网页画流程图
    为什么Java字符串是不可变对象?
  • 原文地址:https://www.cnblogs.com/noip/p/2290776.html
Copyright © 2011-2022 走看看