深度优化算法 ( 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;
}
原文地址:https://www.cnblogs.com/god-of-death/p/14777926.html