En cuanto a las permutaciones de filas y columnas de una matriz puedes hacerlo de esta manera:
Código Python:
Ver originalfrom itertools import permutations
def matrix_perms(rows, cols):
for i in permutations(range(rows)):
for j in permutations(range(cols)):
yield (i, j)
for rows, cols in matrix_perms(4, 4):
print rows, cols
Lo cual te da: 576 = 24 * 24 = 4! * 4!
Obviamente el chiste aquí es el primer elemento del la lista ahora va a ser tu indice 0, el segundo el indice 1 y así sucesivamente.
Ejemplo:
Código Python:
Ver originalfrom itertools import permutations
def matrix_perms(rows, cols):
for i in permutations(range(rows)):
for j in permutations(range(cols)):
yield (i, j)
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for rows, cols in matrix_perms(3, 3):
for row in rows:
for col in cols:
print matrix[row][col],
print
print
Hay vídeos en youtube sobre Maximum Matching, en caso que leer la wikipedia sea un poco difícil
http://en.wikipedia.org/wiki/Matching_(graph_theory)