首页 > 编程语言 > 详细

深度优化算法 ( DFS )

时间:2021-05-17 22:39:03      阅读:25      评论:0      收藏:0      [点我收藏+]

算法框架:

/**
 * 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\n");
        }else{
            printf("true\n");
        }
    }
    
    
    return 0;
}

 

深度优化算法 ( DFS )

原文:https://www.cnblogs.com/god-of-death/p/14777926.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!