人工智能——四皇后问题 一、问题描述 四皇后问题 一个4×4国际象棋盘,依次放入四个皇后,条件:每行、每列及对角线上只允许出现一枚棋子
设:DATA=L(表) x∈L x ∈﹛i j﹜ 1≤ i, j ≤4 其中:i j 表示棋子所在行列 如:24 表示第二行第四列有一枚棋子 棋盘上可放入的棋子数为0 ~ 4 个 ∴L表中的元素数为0 ~ 4 个,即 Length L = 0 ~ 4 ,如图A ﹛12,24,31,43 ﹜ 定义规则: if 1≤ i ≤4 and Length DATA = i -1 then APPEND(DATA( ij )) 1≤ j ≤4 ① 对于任一行i , 1≤ j ≤4 表明每行有四条规则
比如第一行:R11,R12,R13,R14 ② 棋盘中共有四行,所以共有16条规则
即: R11,R12,R13,R14 R21,R22,R23,R24 R31,R32,R33,R34 R41,R42,R43,R44 ③ 16条规则中,哪些是当前可用规则,取决于DATA的长度,即:DATA中的元素个数
换言之,每次只能将一个棋子放在当前行的下一行
二、回溯法搜索策略图 讨论: 上述算法产生22次回溯,原因在于规则自然顺序排列,没考虑任何智能因素
改进算法 定义对角线函数:diag(i,j):过ij点最长的对角线长度值
规定:① 如果: diag(i,k) ≤ diag(i,j) 则规则排列次序为: Rik, Rij 同一行四条规则中,对角线函数值小的排在前面 ② 如果:diag(i,k) = diag(i,j) 则规则排列次序为: Rij ,Rik j < k 对角线长度相等的规则按照字母排列顺序排序 讨论: ① 利用局部知识排列规则是有效的
② BACKTRACK算法对重复出现的状态没有判断,所以可能造成出现死循环
③ 没有对搜索深度加以