zoukankan      html  css  js  c++  java
  • 蓝桥杯 蚂蚁爬楼梯 深度优先搜索(DFS解)

    有一个层数为n(n<=1000)的数字三角形。现有一只蚂蚁从顶层开始向下走,每走下一级,可向左下方向或右下方向走。求走到底层后它所经过数字的总和的最大值。
    【输入格式】
    第一个整数为n,一下n行为各层的数字。
    【输出格式】
    一个整数,即最大值。
    【输入样例 】
    5
    1
    6 3
    8 2 6
    2 1 6 5
    3 2 4 7 6
    【输出样例】
    23
    【样例说明】
    最大值=1+3+6+6+7=23

    优化搜索(MS)

    直接递归

    前面的递归算法,实际上是将整个数字三角形搜索了一遍,所以,完全可以用深度优先搜索算法。就是一条路走到黑,前面没有路就返回上一个路口,另选一条路走到黑……如此反复,知道所有路全部走遍。比直接递归好点,这就是DFS啦

    #include<iostream>
    using namespace std;
    int MAX=0;
    #define maxn 100 
    int a[maxn][maxn],N,sum=0;
    
    void dfs(int i,int j)
    {
    	sum+=a[i][j];
    	if(i==N)//到了最后一行 
    	{
    		if(sum>MAX)
    		{
    			MAX=sum;
    			return;
    		}
    	}
    	for(int x=0;x<2;x++)
    	{
    		dfs(i+1,j+x);
    		sum-=a[i+1][j+x];//回溯 
    	}
    }
    int main()
    {    //采用 文件操作,有兴趣的朋友可以改成缓存区读取操作 
        freopen("input.txt","r",stdin);
        freopen("output.txt","w",stdout);
        cin>>N;
        for(int i=1;i<=N;i++)
    	{
            for(int j=1;j<=i;j++)
    		{
                cin>>a[i][j];
            }
        }
        dfs(1,1);
        cout<<MAX<<endl;
    }
    
  • 相关阅读:
    Python--day72--ajax简介
    Python基础1 介绍、基本语法
    10-Python-字符编码
    09-Python-集合
    07-Python-字符串操作
    99-Python-深浅拷贝
    06-Python-字典
    05-Python-判断语句
    04-Python-元组
    03-Python-操作列表
  • 原文地址:https://www.cnblogs.com/AmosAlbert/p/12832321.html
Copyright © 2011-2022 走看看