社区讨论
原地去世、智慧的提问
P1784数独参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lpgfthn3
- 此快照首次捕获于
- 2023/11/27 12:57 2 年前
- 此快照最后确认于
- 2023/11/27 17:53 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
int mp[10][10],sx,sy,cx,cy,fx,fy;
bool va[10][10], vb[10][10], vc[10][10];
/*bool check(int ax,int ay,int x){//这个函数是判断数独上,行和列和宫有没有相同的数字,如果有,return 1;
int ni = 3*((ax - 1) / 3) ,nj = 3*((ay - 1) / 3) ;//ni,nj分别是横坐标和纵坐标具体的计算方法
for (i = 1;i <= 9; ++ i){//行有没有相同的数字
if (mp[i][ay] == x) return 1;
}
for (j = 1;j <= 9; ++ j){//列有没有相同的数字
if (mp[ax][j] == x) return 1;
}
for (i = ni + 1;i <= ni + 3; ++ i){//宫有没有相同的数字
for (j = nj + 1;j <= nj + 3; ++ j){
if(mp[i][j] == x) return 1;
}
}
return 0;//都没有相同的返回0,表示可以填
}*/
void dfs(int nx,int ny){
int i,j,nz = (nx - 1) / 3 * 3 + (ny - 1) / 3 + 1;;
if (nx == 10){
for(i = 1;i <= 9; ++ i){
for(j = 1;j <= 9; ++ j){
cout << mp[i][j] << " ";
}
cout << endl;
}
exit(0);
}
if (ny == 10){
dfs(nx + 1, 1);
return;
}
if (mp[nx][ny]){
dfs(nx, ny + 1);
return;
}
for (i = 1;i <= 9; ++ i){
if(va[nx][i] != 0 && vb[ny][i] != 0 && vc[nz][i] != 0){
mp[nx][ny] = i;
va[nx][i] = 1;
vb[ny][i] = 1;
vc[nz][i] = 1;
dfs(nx, ny + 1);
mp[nx][ny] = 0;
va[nx][i] = 0;
vb[ny][i] = 0;
vc[nz][i] = 0;
}
}
return;
}
int main(){
int i,j;
for(i = 1;i <= 9; ++i){
for(j = 1;j <= 9; ++j){
cin>>mp[i][j];
va[i][mp[i][j]] = 1;
vb[j][mp[i][j]] = 1;
int az = (i - 1) / 3 * 3 + (j - 1) / 3 + 1;
vc[az][mp[i][j]] = 1;
}
}
dfs(1, 1);
return 0;
}
0分求调
回复
共 0 条回复,欢迎继续交流。
正在加载回复...