1. 程式人生 > >POJ - 2676 暴搜 註意實現細節

POJ - 2676 暴搜 註意實現細節

div pair rst tin enter sed 問題 sizeof 2個

經典sudoku問題
按部就班就好
一定要註意細節
大於1還是大於等於1
r c越界判斷
judge時0的特判
blabla居然磨了2個小時
改了很多地方所以實現得有點冗余,反正能A吧

/*H E A D*/
int sudo[66][66];
char str[666];
int usedr[66][11];
int usedc[66][11];
int rsum[66],csum[66];
typedef pair<int,int> P;
P pos(int i,int j){
    if(i>=1&&i<=3){
        if(j>=1&&j<=3
) return P(1,1); if(j>=4&&j<=6) return P(1,4); if(j>=7&&j<=9) return P(1,7); } if(i>=4&&i<=6){ if(j>=1&&j<=3) return P(4,1); if(j>=4&&j<=6) return P(4,4); if(j>=7&&j<=9
) return P(4,7); } if(i>=7&&i<=9){ if(j>=1&&j<=3) return P(7,1); if(j>=4&&j<=6) return P(7,4); if(j>=7&&j<=9) return P(7,7); } } int check2; bool cal2(int nowr,int nowc,int num){ int sum=0; if(rsum[nowr]+num>45
||csum[nowc]+num>45)return 0; P p=pos(nowr,nowc); int sr=p.first,sc=p.second; check2=0; rep(i,1,9) if(sudo[nowr][i]==num){ ++check2; if(check2>=1)return 0; } check2=0; rep(i,1,9) if(sudo[i][nowc]==num){ ++check2; if(check2>=1)return 0; } check2=0; rep(i,sr,sr+2){ rep(j,sc,sc+2){ if(sudo[i][j]==num){ ++check2; if(check2>=1)return 0; } } } return 1; } int cnt=0; bool dfs(int r,int c){ if(r==9&&c==10)return 1; else if(c==10){ c=1; r++; if(r==10)return 1; } while(sudo[r][c]){ c++; if(c==10){ c=1; r++; if(r==10)return 1; } } rep(i,1,9){ if(usedr[r][i]||usedc[c][i]||cal2(r,c,i)==0){ continue; } if(!cal2(r,c,i))continue; usedr[r][i]++;usedc[c][i]++; rsum[r]+=i;csum[c]+=i; sudo[r][c]=i; if(dfs(r,c+1))return 1; else{ usedr[r][i]--;usedc[c][i]--; rsum[r]-=i;csum[c]-=i; sudo[r][c]=0; } } return 0; } int main(){ int T=read(); while(T--){ memset(usedr,0,sizeof usedr); memset(usedc,0,sizeof usedc); memset(rsum,0,sizeof rsum); memset(csum,0,sizeof csum); rep(i,1,9){ s1(str); rep(j,1,9) sudo[i][j]=str[j]-‘0‘; } bool flag=0; rep(i,1,9){ rep(j,1,9){ if(!sudo[i][j])continue; if(++usedr[i][sudo[i][j]]>1){ flag=1; } if(++usedc[j][sudo[i][j]]>1){ flag=1; } rsum[i]+=sudo[i][j]; csum[j]+=sudo[i][j]; } } dfs(1,1); rep(i,1,9){ rep(j,1,9){ print(sudo[i][j]); } enter; } } return 0; }

POJ - 2676 暴搜 註意實現細節