找到所有获胜的tic tac toe board状态的集合

时间:2017-09-20 16:39:46

标签: arrays algorithm matlab

这是我的问题。我想创建一个算法,该算法为n维井字游戏板生成每个可能获胜板状态的数组。假设你有一个n = 2的板,意思是2x2,那么该函数应该返回以下数组:

wins = [
    [1,2],
    [1,3],
    [1,4],
    [2,4]
]

我知道这不是一个特定的MATLAB问题,但是我试图扩展我对MATLAB如何工作的理解。我的一般想法是执行以下操作的算法:

generate an n-dimensional board of zeros
1. Go to the first cell, record that index ([1,])
2. Go to the end of the row, and that's your first board state ([1,2])
3. Go to the end of the column, that's your second board state ([1,3])
4. Go to the end of the diagonal, that's your third board state ([2,3])
5. Advance to the next cell, repeat, checking if you have already created that board state first ([2,4] should be the only one it hasn't done)

我想我已经过度思考这个问题,但我不确定如何处理它。有人可以用MATLAB-y的方式给我一些指导吗?我的猜测是遍历矩阵并且只是选择整行/列/对角线很容易,它会检查它是否存在'我得不到的部分。一般来说,你会怎么称呼这个算法?谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

更好的想法:你不是按方形做的,你是按尺寸做的。对于棋盘上的每个尺寸,您可以通过获胜组合来改变或不改变坐标:

  • 遍历所有可能的值,从低到高
  • 遍历所有可能的值,从高到低
  • 在其他维度迭代时保持不变,但对范围内的每个值执行此操作,重复其他坐标。

例如,对于4 ^ 3板,让我们看一下最后一个坐标(称为x1,x2,x3),x3。假设您已经确定x1将从低到高迭代,x2将恒定为2.您现在将x3视为:

  • 遍历所有可能的值,从低到高
    • (1,2,1),(2,2,2),(3,2,3)
  • 遍历所有可能的值,从高到低
    • (1,2,3),(2,2,2),(3,2,1)
  • 在其他维度迭代时保持常量,但对范围中的每个值执行此操作,重复其他坐标。
    • (1,2,1),(2,2,1),(3,2,1)
    • (1,2,2),(2,2,2),(3,2,2)
    • (1,2,3),(2,2,3),(3,2,3)

这会让你感动吗?