zoukankan      html  css  js  c++  java
  • 深度优化算法 ( DFS )

    算法框架:

    /**
     * DFS核心伪代码
     * 前置条件是visit数组全部设置成false
     * @param n 当前开始搜索的节点
     * @param d 当前到达的深度
     * @return 是否有解
     */
    bool DFS(Node n, int d){
        if (isEnd(n, d)){//一旦搜索深度到达一个结束状态,就返回true
            return true;
        }
     
        for (Node nextNode in n){//遍历n相邻的节点nextNode
            if (!visit[nextNode]){//
                visit[nextNode] = true;//在下一步搜索中,nextNode不能再次出现
                if (DFS(nextNode, d+1)){//如果搜索出有解
                    //做些其他事情,例如记录结果深度等
                    return true;
                }
     
                //重新设置成false,因为它有可能出现在下一次搜索的别的路径中
                visit[nextNode] = false;
            }
        }
        return false;//本次搜索无解
    }

    实例:24点游戏算法

    #include <stdio.h>
    
    int arr[4];
    int flag[4];
    int dfs(int num)
    {
        if(num == 24){
            return 1;
        }
        
        for(int i=0; i<4; i++){
            if(flag[i] == 0){
                flag[i] = 1;
                if(dfs(num + arr[i])){
                    return 1;
                }else if(dfs(num - arr[i])){
                    return 1;
                }else if(dfs(num * arr[i])){
                    return 1;
                }else if(dfs(num / arr[i]) && num % arr[i] == 0){
                    return 1;
                }
                flag[i] = 0;
            }
        }
        
        return 0;
    }
    int main(void)
    {
    
        
        while(scanf("%d %d %d %d", &arr[0], &arr[1], &arr[2], &arr[3]) != EOF){
            for(int i=0; i<4; i++){
                flag[i] = 0;
            }
            if(dfs(0) == 0){
                printf("false
    ");
            }else{
                printf("true
    ");
            }
        }
        
        
        return 0;
    }
  • 相关阅读:
    Logistic 与 softmax
    opencv::KMeans图像分割
    opencv::KMeans方法概述
    opencv::opencv_traincascade.exe
    opencv::opencv_createsamples.exe
    opencv::视频人脸检测
    opencv实践::对象提取与测量
    opencv实践::透视变换
    opencv实践::对象计数
    opencv实践::对象的提取
  • 原文地址:https://www.cnblogs.com/god-of-death/p/14777926.html
Copyright © 2011-2022 走看看