我需要找到一个算法(最好用Java)来解决以下问题(希望能够清楚地表达出来):
给定1和0值的矩阵(不一定是正方形),如下所示:
我必须能够确定最大单元格数,这样在所选择的单元格中没有一对单元格具有共同的行或列。
例如,如果选择了单元格(Row_A, Col_Y)
,则必须排除单元格(Row_A, Col_V)
,(Row_A, Col_S)
,(Row_C, Col_Y)
,(Row_G, Col_Y)
。
问题必须作为二分图来解决,其中节点的分区由行表示,而列由另一个表示。仅在各自单元格中具有1的节点之间存在链接。
所以我们将得到分区Part_Row,它将包含以下节点:A,B,C,D,E,F,G。而分区Part_Col将包含节点:Z,Y,X,W,V ,T,S,R,Q。 拱门将是:
A->Y, A->S
B->Z, B->D
C->Y, C->X, C->S,
etc., etc.
如何确定最大细胞数? 将最大匹配问题解决为最大流量问题是否有意义?