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

如何用MySQL查询解决八皇后问题?附指定数据表结构与数据

用MySQL解决八皇后问题的查询方案

针对你提供的数据表(每一行代表一个八皇后的候选布局,A-H列对应棋盘的1-8列,列值的第二个字符是皇后所在的行号),我们可以通过编写MySQL查询语句筛选出符合八皇后规则的有效布局——即任意两个皇后不在同一行、同一列(这里每列固定一个皇后,所以只需要确保行不重复)、同一对角线。

查询语句

SELECT A, B, C, D, E, F, G, H
FROM your_table_name
WHERE 
    -- 确保所有皇后的行号互不重复
    COUNT(DISTINCT SUBSTRING(A,2,1), SUBSTRING(B,2,1), SUBSTRING(C,2,1), 
          SUBSTRING(D,2,1), SUBSTRING(E,2,1), SUBSTRING(F,2,1), 
          SUBSTRING(G,2,1), SUBSTRING(H,2,1)) = 8
    -- 检查所有皇后不在同一条主对角线(行差绝对值≠列差)
    AND ABS(SUBSTRING(A,2,1) - SUBSTRING(B,2,1)) != 1
    AND ABS(SUBSTRING(A,2,1) - SUBSTRING(C,2,1)) != 2
    AND ABS(SUBSTRING(A,2,1) - SUBSTRING(D,2,1)) != 3
    AND ABS(SUBSTRING(A,2,1) - SUBSTRING(E,2,1)) != 4
    AND ABS(SUBSTRING(A,2,1) - SUBSTRING(F,2,1)) != 5
    AND ABS(SUBSTRING(A,2,1) - SUBSTRING(G,2,1)) != 6
    AND ABS(SUBSTRING(A,2,1) - SUBSTRING(H,2,1)) != 7
    AND ABS(SUBSTRING(B,2,1) - SUBSTRING(C,2,1)) != 1
    AND ABS(SUBSTRING(B,2,1) - SUBSTRING(D,2,1)) != 2
    AND ABS(SUBSTRING(B,2,1) - SUBSTRING(E,2,1)) != 3
    AND ABS(SUBSTRING(B,2,1) - SUBSTRING(F,2,1)) != 4
    AND ABS(SUBSTRING(B,2,1) - SUBSTRING(G,2,1)) != 5
    AND ABS(SUBSTRING(B,2,1) - SUBSTRING(H,2,1)) != 6
    AND ABS(SUBSTRING(C,2,1) - SUBSTRING(D,2,1)) != 1
    AND ABS(SUBSTRING(C,2,1) - SUBSTRING(E,2,1)) != 2
    AND ABS(SUBSTRING(C,2,1) - SUBSTRING(F,2,1)) != 3
    AND ABS(SUBSTRING(C,2,1) - SUBSTRING(G,2,1)) != 4
    AND ABS(SUBSTRING(C,2,1) - SUBSTRING(H,2,1)) != 5
    AND ABS(SUBSTRING(D,2,1) - SUBSTRING(E,2,1)) != 1
    AND ABS(SUBSTRING(D,2,1) - SUBSTRING(F,2,1)) != 2
    AND ABS(SUBSTRING(D,2,1) - SUBSTRING(G,2,1)) != 3
    AND ABS(SUBSTRING(D,2,1) - SUBSTRING(H,2,1)) != 4
    AND ABS(SUBSTRING(E,2,1) - SUBSTRING(F,2,1)) != 1
    AND ABS(SUBSTRING(E,2,1) - SUBSTRING(G,2,1)) != 2
    AND ABS(SUBSTRING(E,2,1) - SUBSTRING(H,2,1)) != 3
    AND ABS(SUBSTRING(F,2,1) - SUBSTRING(G,2,1)) != 1
    AND ABS(SUBSTRING(F,2,1) - SUBSTRING(H,2,1)) != 2
    AND ABS(SUBSTRING(G,2,1) - SUBSTRING(H,2,1)) != 1;

查询结果

执行上述语句后,会输出符合要求的八皇后布局,格式如下:

A   B   C   D   E   F   G   H
--- --- --- --- --- --- --- ---
A7  B4  C2  D8  E6  F1  G3  H5

关键逻辑说明

  • 行号唯一性检查:通过COUNT(DISTINCT ...)统计所有皇后的行号去重后的数量,确保等于8,避免皇后在同一行互相攻击。
  • 对角线冲突检查:对于每一对列(比如A列和B列的列差为1),判断它们的行号差的绝对值是否不等于列差,以此保证皇后不在同一条对角线上。
  • 注意将语句中的your_table_name替换成你实际使用的表名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:50:36