日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

精确覆盖DLX算法模板

發布時間:2023/11/30 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 精确覆盖DLX算法模板 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

代碼

struct DLX {int n,id;int L[maxn],R[maxn],U[maxn],D[maxn];int C[maxn],S[maxn],loc[maxn][2];void init(int nn=0) //傳列長 {n=nn;for(int i=0;i<=n;i++) U[i]=D[i]=i,L[i]=i-1,R[i]=i+1;L[0]=n; R[n]=0;id=n;memset(S,0,sizeof(S));}void AddRow(int x,int col,int A[]) //傳入參數是行標號,列長,列數組 {bool has=false;int first=id+1;for(int y=1;y<=col;y++){if(A[y]==0) continue;has=true;++id;L[id]=id-1; R[id]=id+1;D[id]=y; U[id]=U[y];D[U[y]]=id; U[y]=id;loc[id][0]=x,loc[id][1]=y;C[id]=y; S[y]++;}if(!has) return;R[id]=first; L[first]=id;}void Remove(int Size){for(int j=D[Size];j!=Size;j=D[j])//將左右兩邊連接L[R[j]]=L[j],R[L[j]]=R[j];}void Resume(int Size){for(int j=U[Size];j!=Size;j=U[j])//恢復L[R[j]]=R[L[j]]=j;}bool vis[ms];//標記行是否訪問過int h() //啟發式函數 {int ret=0;int i,j,k;memset(vis,0,sizeof(vis));for(i=R[0];i;i=R[i]){if(vis[i]) continue;ret++;for(j=D[i];j!=i;j=D[j]) //所有關聯的標記了for(k=R[j];k!=j;k=R[k]) vis[C[k]]=1;}return ret;}void dfs(int step){if(step+h()>=ans) return;if(R[0]==0){ ans=min(ans,step); return; }int Min=INF,c=-1;for(int i=R[0];i;i=R[i]) if(Min>S[i]){ Min=S[i]; c=i; }for(int i=D[c];i!=c;i=D[i]){Remove(i);for(int j=R[i];j!=i;j=R[j]) Remove(j);dfs(step+1);for(int j=L[i];j!=i;j=L[j]) Resume(j);Resume(i);}return;} }dlx; View Code

?

轉載于:https://www.cnblogs.com/wust-ouyangli/p/5747086.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的精确覆盖DLX算法模板的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。