poj 3740 DLX(精確覆蓋)

2021-07-01 19:05:25 字數 774 閱讀 6199

題意:經典的精確覆蓋問題。

思路:精確覆蓋問題是npc的,用dlx能夠比較有效的搜尋。寫完兩個數獨再寫這個就不難了(實際上這個是原始問題,數獨只是dlx的應用)。

#include #include #define n 16

#define m 300

struct nodep[n*m+m+5];

int s[n+5][m+5];

int n,m,top,cnt[m];

void init()

p[0].l = m;

p[m].r = 0;

top = m;

}void add(int l,int i,int j)

void del(int c)

}}void re(int c)

}int dfs()

del(c);

for(i = p[c].d;i!=c;i=p[i].d)

re(c);

return 0;

}int main()

}for(i = 1;i<=n;i++)

for(j = first = 1;j<=m;j++)

if(s[i][j])else

add(top, i, j);

}if(dfs())

printf("yes, i found it\n");

else

printf("it is impossible\n");

}return 0;

}

POJ 3740 精確覆蓋問題,DLX模版

花3小時打上的注釋,分享給大家。1 include 2 include 3 const int maxr 20 4 const int maxc 310 5 const int maxn maxr maxc maxc 6const int inf maxr 10 7 8int n,m 9int l ...

DLX 精確覆蓋 重複覆蓋

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

DLX 精確覆蓋問題

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