我必须使用 0的和 1的来初始化矩阵(大小 Nx(N-1)),每次放置a 0 (或 1 )位于[ i , j ]位置, 1 (或 0 )也放置在矩阵中,位于[ k , j ]位置,其中 k 是一个与 i 不同的随机行(请注意该列是相同的。)
要满足的条件是同一行中连续 0 或 1 不能超过2个。
因此,下一个矩阵将无效:
0 1 1
1 1 1
1 0 1
0 1 1
这个有效:
0 1 1
1 0 0
1 1 0
0 0 1
关于如何实现此初始化的任何想法?假设矩阵以 -1的开头。
答案 0 :(得分:0)
首先,对于存在这样的矩阵(每个(i,j)元组具有唯一的相反(k,j)元组),N必须是2的倍数。
第1步创建完全随机(N / 2)*(N-1)矩阵。
第2步更正此矩阵中的错误,以便每一行都没有错误。使用以下算法:
for row in matrix:
for i in range(0, len(row) - 2):
if row[i] == row[i + 1] == row[i + 2]:
row[i + 2] = 1 if row[i + 2] == 0 else 0
第3步对于每一行,按顺序(也称为N / 2)追加反行。
for row_index in range(N // 2):
row = matrix[row_index]
new_row = [0 if x == 1 else 1 for x in row]
matrix.append(new_row)
步骤4 对于每个(i,j)在[0,N)中生成ap,用(p,j)交换(i,j)并查看它是否与行中的3相矛盾模式,如果是的话,交换它们。