我试图解决井字棋有一个简单的算法,极大极小。 很简单,但应涵盖了很多的语言。 我到目前为止有:
该板被表示为9(未结合)的变量,即要么设置为阵列x
或o
。
胜利条件是那么基本上: win(Player, [X1,X2,X3|_]) :- X1==Player,X2==Player,X3==Player.
等所有八个变种。 平局仅仅是一个简单的检查所有的变量是否绑定。
此举条款也简单: move(Player, [X|_], 0, 0) :- var(X), X=Player.
,再次为所有可能的位置(我会离开代码重用开放以后的节目:))。
现在,我可以生成简单回溯所有可能的行动: move(Player, Board, X, Y).
这应该基本上全部是我(在平局的情况下,很明显,如果计算机赢返回1一个简单的效用函数,0和-1如果人的胜利,这很容易)需要极小。 我只是不知道如何实现这一点,我在网络上找到的所有例子都比较复杂,没有得到很好的解释。
注意我很好N ^ 2或更糟糕的运行时行为 - 这真的不是效率。 是的,我知道如何在口齿不清,蟒蛇,Java编写极小 - 只是不知道如何“口”该代码Prolog的。