python递归算法_极小极大递归算法(Python)

一位新手程序员正在开发一种井字游戏的变异版本,该版本允许玩家在棋盘上的任意位置放置X或O。他在实现极大极小算法的过程中遇到了递归方面的困难,并寻求有关如何正确递归调用以及如何确定最佳移动的帮助。

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

我是新来的,所以我道歉,如果我在这里张贴任何错误。。。我做了一个搜索,但没有找到多少对我有帮助的。我在写一个关于井字游戏的变异的极大极小算法。这种变化允许玩家在棋盘上的任何地方放置一个X或O。我在递归方面遇到了麻烦,希望能得到一些指导。在class TicTacToeBoard:

def __init__(self, initGameBoard):

#initGameBoard is a string

self.board = initGameBoard

def getEmptySpaces(self):

return self.board.count("-")

def markX(self, index):

self.board = self.board[:index] + "x" + self.board[index+1:]

def markO(self, index):

self.board = self.board[:index] + "o" + self.board[index+1:]

def endGame(self):

#determines if someone has won

endGameStates = [[0,1,2],[3,4,5],[6,7,8],[0,3,6],[1,4,7],[2,5,8],[0,4,8],[2,4,6]]

for x in range(len(endGameStates)):

trySlice = self.board[endGameStates[x][0]] + self.board[endGameStates[x][1]] + \

self.board[endGameStates[x][2]]

if trySlice[0] == trySlice[1] == trySlice[2] and "-" not in trySlice:

return True

return False

def draw(self):

#determines if there has been a draw

if "-" not in self.board:

endGameStates = [[0,1,2],[3,4,5],[6,7,8],[0,3,6],[1,4,7],[2,5,8],[0,4,8],[2,4,6]]

for x in range(len(endGameStates)):

trySlice = self.board[endGameStates[x][0]] + self.board[endGameStates[x][1]] + \

self.board[endGameStates[x][2]]

if trySlice[0] == trySlice[1] == trySlice[2] and "-" not in trySlice:

return False

return True

else:

return False

def __str__(self):

boardStr = ""

for char in self.board:

boardStr += char

return boardStr

以上是我的董事会课程。我只是在用琴弦,没有做任何太花哨的事。我还使用了一个非常简单的节点类,它只存储数据(虽然我想我也可以使用字符串,我猜…)

^{pr2}$

fitnessFunction根据剩余的空格数返回分数。我的递归miniMax方法有问题。我需要做的是检查基本情况(无论是球员获胜,还是平局),如果这些基本情况不是真的,我会根据剩余的空位数计算出谁的移动。我想我已经做到了,但是我不知道下一步该怎么做(递归部分)。我还需要能够得到最小或最大的孩子,这取决于轮到谁。我想我被递归弄糊涂了。我是CS新手,没怎么接触过。如有任何提示,将不胜感激!:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值