用c++写了个解数独(极简版,甚至都懒得用stl),刚刚接触解数独,只是运用游戏规则写出
#include<bits/stdc++.h>
using namespace std;
int main(){
int book[10][10][10]={};//前两个表示位置,后面表示使用情况
int nn[10][10]={};//这个位置已经添几个
//set<int> st[10];
int in[10][10];
for(int i=1;i<=9;i++){
for(int j=1;j<=9;j++){
cin>>in[i][j];
}
}
for(int i=1;i<=9;i++){
for(int j=1;j<=9;j++){
if(in[i][j]!=0){
nn[i][j]=10;
int tmp=in[i][j];
for(int k=1;k<=9;k++){
if(book[k][j][tmp]==0){
book[k][j][tmp]=1;
nn[k][j]++;
}
}
for(int k=1;k<=9;k++){
if(book[i][k][tmp]==0){
book[i][k][tmp]=1;
nn[i][k]++;
}
}
int t1=(i-1)/3*3+1;int t2=(j-1)/3*3+1;//方格
for(int k1=t1;k1<=((i-1)/3*3+3);k1++){
for(int k2=t2;k2<=((j-1)/3*3+3);k2++){
if(book[k1][k2][tmp]==0){
book[k1][k2][tmp]=1;
nn[k1][k2]++;
}
}
}
}
}
}
while(1){
int flag=0;
for(int i=1;i<=9;i++){
for(int j=1;j<=9;j++){
if(nn[i][j]==8){
flag=1;
int ans1;
for(int k=1;k<=9;k++){
if(book[i][j][k]==0)ans1=k;
}
in[i][j]=ans1;
nn[i][j]=10;
int tmp=in[i][j];
for(int k=1;k<=9;k++){
if(book[k][j][tmp]==0){
book[k][j][tmp]=1;
nn[k][j]++;
}
}
for(int k=1;k<=9;k++){
if(book[i][k][tmp]==0){
book[i][k][tmp]=1;
nn[i][k]++;
}
}
int t1=(i-1)/3*3+1;int t2=(j-1)/3*3+1;//方格
for(int k1=t1;k1<=((i-1)/3*3+3);k1++){
for(int k2=t2;k2<=((j-1)/3*3+3);k2++){
if(book[k1][k2][tmp]==0){
book[k1][k2][tmp]=1;
nn[k1][k2]++;
}
}
}
}
}
}
if(flag==0)break;
}
cout<<endl;
for(int i=1;i<=9;i++){
for(int j=1;j<=9;j++){
cout<<in[i][j]<<" ";
}cout<<endl;
}
}
回头试试难度高一点的,如果不能解出来就写个深搜qwq