写出所有24种4个数的排列,存到一个数组里,假如数组是P[24][4];
那么可以
for
(i
=
0
i
<
24
i++)
for
(j
=
0
j
<
24
j++)
for
(k
=
0
k
<
24
k++)
三层循环,P[i],P[j],P[k]分别是矩阵的三个列
思路2:
利用dfs递归枚举
int
used[3][4]/*这个数组存放三个列中0~3这四个数是否已在这一列中出现过,需要提前清零*/
int
mat[3][4]/*要枚举的矩阵*/
void
dfs(int
col,
int
row)/*col表示现在已经搜索到哪一列(从0开始编号),row表示这一列已经填了几行*/
{
int
i
if
(col
==
2
&&
row
==
4)
{
....../*运行到这里的时候,mat就是枚举到的一个矩阵*/
return
}
if
(row
==
4)
{row
=
0
col++}
for
(i
=
0
i
<
4
i++)
if
(!used[col][i])
{
used[col][i]
=
1
mat[col][row]
=
i
dfs(col,
row
+
1)
used[col][i]
=
0
}
return
}
调用的时候调用dfs(0,0)