刚学OI求助

P1784 数独

第一个看到我相信是刚学OI的
by bztMinamoto @ 2018-08-11 16:44:07


~~第一个看到我相信是刚学OI的~~
by 2017zc @ 2018-08-11 16:46:00


刚学OI
by AstoriaG @ 2018-08-11 16:48:31


~~第一个看到我相信是刚学OI的~~
by AstoriaG @ 2018-08-11 16:48:51


???
by Parabola @ 2018-08-11 16:48:53


~~第一个看到我相信是刚学OI的~~
by ylxmf2020 @ 2018-08-11 16:49:39


什么意思?
by Parabola @ 2018-08-11 16:50:49


呀我个傻屌v写成0~8了,但是还不对
by Parabola @ 2018-08-11 16:51:17


在您们眼中DLX这么水的嘛。
by Parabola @ 2018-08-11 17:09:22


# 打表大法好 ```cpp // luogu-judger-enable-o3 #include <iostream> using namespace std; int a[11][11]; bool flag[3][11][11]; // flag[0][i][j]代表第i行,值为j的数是否使用 // flag[1][i][j]代表第i列,值为j的数是否使用 // flag[2][i][j]代表第i宫,值为j的数是否使用 int m[10][10]={ {0,0,0,0,0,0,0,0,0,0}, {0,1,1,1,2,2,2,3,3,3}, {0,1,1,1,2,2,2,3,3,3}, {0,1,1,1,2,2,2,3,3,3}, {0,4,4,4,5,5,5,6,6,6}, {0,4,4,4,5,5,5,6,6,6}, {0,4,4,4,5,5,5,6,6,6}, {0,7,7,7,8,8,8,9,9,9}, {0,7,7,7,8,8,8,9,9,9}, {0,7,7,7,8,8,8,9,9,9} }; bool check(int xx,int yy,int ii){ if(flag[0][xx][ii]||flag[1][yy][ii]||flag[2][m[xx][yy]][ii]){ return 0; } return 1; } void dfs(int x,int y){ if (x==10&&y==1) { for(int i=1;i<=9;i++){ for(int j=1;j<=9;j++){ cout<<a[i][j]<<' '; } cout<<endl; } return; } int tx=x; int ty=y+1; if(ty==10){ tx++; ty=1; } if(a[x][y]){ dfs(tx,ty); }else{ for(int i=1;i<=9;i++){ if(check(x,y,i)){ a[x][y]=i; flag[0][x][i]=flag[1][y][i]=flag[2][m[x][y]][i]=1; dfs(tx,ty); a[x][y]=0; flag[0][x][i]=flag[1][y][i]=flag[2][m[x][y]][i]=0; } } } } int main(){ for(int i=1;i<=9;i++){ for(int j=1;j<=9;j++){ cin>>a[i][j]; if(a[i][j]!=0){ flag[0][i][a[i][j]]=flag[1][j][a[i][j]]=flag[2][m[i][j]][a[i][j]]=1; } } } dfs(1,1); return 0; } ```
by JAMERES86 @ 2018-08-11 17:09:37


| 下一页