深度优化算法 ( 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\n");
        }else{
            printf("true\n");
        }
    }
    
    
    return 0;
}
复制代码

 

posted @   流水灯  阅读(275)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
历史上的今天:
2018-05-17 贴片 SIM Card
点击右上角即可分享
微信分享提示