algorithm – 交换矩阵中的行以确保每个对角线值都非零?

我有一个12×12矩阵,对角线值从非零变为零,我想知道是否有一个算法来交换矩阵中的所有行,以确保没有非零值.

我的矩阵C,在C(i,i)处不得有任何非零值.思考?

例:
我有一个5×5矩阵

3 4 5 0 6
1 0 4 3 0
0 5 1 0 3
0 1 0 2 0 
2 0 5 0 0

如何使它没有非零对角线元素?

最佳答案 >构建二分图.

>在左侧创建一组节点,每个行索引一个.
>在右侧创建一组节点,每个列索引一个.

>对于矩阵的每个元素A(i,j):

>如果A(i,j)为零,则在第i行节点和第j列节点之间添加边.

>在二分图中找到完美匹配.匹配中的n个边将告诉您如何置换行.匹配中的Edge(i,j)表示行i应该成为行j.

请参阅此处了解完美匹配算法:http://en.wikipedia.org/wiki/Bipartite_matching#In_unweighted_bipartite_graphs

点赞