Prolog第三天作业

本文探讨了使用智能算法解决数独和八皇后问题的方法,详细介绍了数独问题的4×4实例及解决方案,同时阐述了通过皇后列表解决八皇后问题的策略,包括行、列和对角线的有效验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.解决6X6 与9X9数独问题。

扩展原例子4X4的数独,重复写行、列、格子太麻烦了,直接贴4X4的例子:

:- use_module(library(clpfd)).
 
valid([]).
valid([Head|Tail]) :-
    all_different(Head),
    valid(Tail).

sudoku(Puzzle, Solution) :-
	Solution = Puzzle,
	Puzzle = [S11, S12, S13, S14,
	          S21, S22, S23, S24,
		  S31, S32, S33, S34,
		  S41, S42, S43, S44],
	Puzzle ins 1..4,
	 
	Row1 = [S11, S12, S13, S14],
	Row2 = [S21, S22, S23, S24],
	Row3 = [S31, S32, S33, S34],
	Row4 = [S41, S42, S43, S44],
	 
	Col1 = [S11, S21, S31, S41],
	Col2 = [S12, S22, S32, S42],
	Col3 = [S13, S23, S33, S43],
	Col4 = [S14, S24, S34, S44],
	 
	Square1 = [S11, S12, S21, S22],
	Square2 = [S13, S14, S23, S24],
	Square3 = [S31, S32, S41, S42],
	Square4 = [S33, S34, S43, S44],
	 
	valid([Row1, Row2, Row3, Row4,
		   Col1, Col2, Col3, Col4,
		   Square1, Square2, Square3, Square4]),
		   
	writeln(Row1),
	writeln(Row2),
	writeln(Row3),
	writeln(Row4).

2.采用一个皇后列表的方式解决八皇后问题,使用1~8范围内的数字代表每个皇后,通过皇后列表中的位置取其行号并通过其在列表的值取其列号。

PS.不知道怎么取表中位置,用index代替下表

:- use_module(library(clpfd)).

valid_col([]).
valid_col([Col|Tail]) :- 
	member(Col, [1, 2, 3, 4, 5, 6, 7, 8]),
	valid_col(Tail).

diags1([], [], []).
diags1([Row|RowsTail], [Col|ColsTail], [Diagonal|DiagonalTail]) :-
	Diagonal is Row - Col,
	diags1(RowsTail, ColsTail, DiagonalTail).

diags2([], [], []).
diags2([Row|RowsTail], [Col|ColsTail], [Diagonal|DiagonalTail]) :-
	Diagonal is Row + Col,
	diags2(RowsTail, ColsTail, DiagonalTail).

eight_queens(Cols) :-
	Cols = [_, _, _, _, _, _, _, _],
	valid_col(Cols),
	
	ColIndex = [1, 2, 3, 4, 5, 6, 7, 8],
	
	diags1(ColIndex, Cols, Diags1),
	diags2(ColIndex, Cols, Diags2),
	
	all_different(Cols),
	all_different(Diags1),
	all_different(Diags2).


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值