You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prolog中统计列表内解的数量:如何计算8皇后问题的总解数

8皇后解数查询方法

前置准备:补全缺失内容

  1. 你当前给出的代码缺少noattack/2谓词定义,这是判断皇后互不攻击的核心逻辑,先在原有代码后追加如下代码:
noattack(_, []).
noattack(X/Y, [X1/Y1|Rest]) :-
    % 不同列
    Y =\= Y1,
    % 不同对角线
    abs(X - X1) =\= abs(Y - Y1),
    noattack(X/Y, Rest).
  1. 原代码中递归基准子句sol([8]).仅适配8皇后场景,若运行时无返回结果,可根据你的结构定义调整为sol([]).适配通用递归逻辑。

操作步骤

  • 第一步:初始化8皇后的运行上下文,执行如下查询初始化参数:
    ksol(8, _).
    
  • 第二步:统计所有解的总数量,执行如下任意一条查询即可:
    • 方法1:获取所有解的同时统计数量(会保留所有解到列表中)
      findall(L, solution(L), AllSolutions), length(AllSolutions, TotalCount).
      
    • 方法2:仅统计数量,内存占用更低(推荐,SWI-Prolog等支持aggregate的实现可用)
      aggregate_all(count, solution(_), TotalCount).
      

预期结果

查询返回的TotalCount值为92,和8皇后问题的标准解数一致。

内容的提问来源于stack exchange,提问作者niconico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 14:06:02