まず、2つの対角線になることがあります。 最も簡単な解決策は、値 が異なるか、マトリックスの境界に当たるまで4つの可能な方向に拡大しています。両方のエンドポイントの境界である が終了した場合、それは対角線に属することを意味します。このため 擬似コードは、あなたの心のゲームの文脈では非常に 自然保管されている、すべてのこのような点を計算するために必要な場合には
boolean expands(x, y, dir_x, dir_y, matrix):
x1 = x
y1 = y
while positionInBorder(x1, y1):
if matrix[x][y] != matrix[x1][y1]:
return false
x1 += dir_x
y1 += dir_y
return true
boolean inDiagonal(x, y, matrix):
return (expands(x, y, -1, -1, matrix) and expands(x, y, +1, +1, matrix)) or
(expands(x, y, +1, -1, matrix) and expands(x, y, -1, +1, matrix))
を次の可能性があるので、あなたは、より効率的なアルゴリズムを使用することができます。 あなたはすべての可能な対角線をチェックし、それらの値が同じであれば、その中のすべての要素の セットフラグ:
isInDiagonal[n][n] = False for all i, j.
for start_position in top_row and left_column of matrix:
go down right while same value:
if reached bondary:
pass again and set isInDiagonal[x][y] for each item in diagonal
for start_position in top_row and right_column of matrix:
go down left while same value:
if reached bondary:
pass again and set isInDiagonal[x][y] for each item in diagonal
return isInDiagonal
グレート。どうもありがとう。 (コードの2番目のチャンクでは、left_columnとright_columnを意味しますか?) – biggdman
はい、更新された疑似コードは、 – peewhy