矩陣精確覆蓋問題

2021-06-26 17:47:50 字數 954 閱讀 4343

/**

* 精確覆蓋問題:由0和1組成的矩陣,從中選出若干行,使得每列恰好只包含乙個1 解決思路: 當所有列都已包含,終止,否則: 選定一列c(確定)

* 選擇一行r,使得a[r][c]==1(隨機) 將該行包含進解集 對於該行中任意列c1,若滿足a[r][c1]==1,則:

* 刪除c1,且對於所有滿足a[r1][c1]的行r1,刪除r1 迴圈直至滿足終止條件

* */

public class exactcover ,,,

,,};printexactcover(a, 6, 7);

}public static void printexactcover(int a, int rowsize, int colsize )

public static void printmark( int mark, int markindex )

system.out.println();

}public static void findexactcover(int a, int rowsize, int colsize, int mark, int markindex, int col)

if( rowcount==0 )

while( usecol[col] )

for( int i=0; iint markrow= new int [rowsize];

int markcol= new int [colsize];

int markrowsize = 0;

int markcolsize = 0;

if( !userow[i] && a[i][col]==1 )}}

}findexactcover(a, rowsize, colsize, mark, markindex+1,col+1);

while(markrowsize>0)

while(markcolsize>0)}}

}}

DLX 精確覆蓋問題

精確覆蓋問題 給定乙個由0 1組成的矩陣,問是否能找到乙個行的集合,使得集合中每一列都恰好包含乙個1 如圖 演算法x 通過dfs,每次選取一行可行 模擬演算法x過程 很容易想到上面的搜尋,但是狀態的改變很難操作,包括了刪除和復原,使用普通的資料結構運算根本停不下來。於是,一位大師想到了神奇的資料結構...

DLX 精確覆蓋 重複覆蓋

給定乙個n m的矩陣,有些位置為1,有些位置為0。如果g i j 1則說明i行可以覆蓋j列。problem 1 選定最少的行,使得每列有且僅有乙個1.2 選定最少的行,使得每列至少乙個1.這類屬於np問題的問題,可以使用搜尋解決。但是普通的搜尋必超時無疑。因此我們要設法加優化來加快速度。dancin...

很好的矩陣覆蓋問題

參考這篇文章 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?class solution return a 開始看,很難懂是吧,我也看了好一會兒。把 b a b 用上乙個式子a a b代入,得到,其實 b a b b ...