数独(sudoku)C++
1335 ワード
バグもあります.もし入力した1つの间违ったsudoku caseならば、正确に修正することができなくて、时间があって更に直しに来ます
#include<iostream>
using namespace std;
bool flag=false;
//int cell[9][9]={1,2,3,4,5,6,7,8,9,1};
int cell[9][9]={0};
bool check(int row,int col,int val){
//
int i,j;
int mrow;
int mcol;
for(j=0;j<9;j++)
if(val==cell[row][j])
return false;
//
for(i=0;i<9;i++)
if(val==cell[i][col])
return false;
//
mrow=row/3*3;
//
mcol=col/3*3;
for(i=mrow;i<mrow+3;i++)
for(j=mcol;j<mcol+3;j++)
if(val==cell[i][j])
return false;
return true;
}
int DFS(int row,int col){
if(row>8){
flag=true;
return 0;
}
if(cell[row][col]!=0){
if(col==8)
DFS(row+1,0);
else
DFS(row,col+1);
}
else{
int val;
for(val=1;val<=9;val++){
if(check(row,col,val)==true){
cell[row][col]=val;
if(col==8)
DFS(row+1,0);
else
DFS(row,col+1);
if(flag==true)
return 0;
//roll back
cell[row][col]=0;
/*if(col==0)
DFS(row-1,8);
else
DFS(row,col-1);
*/
}
}
/*if(col==0)
DFS(row-1,8);
else
DFS(row,col-1);
*/
}
}
int main(){
DFS(0,0);
for(int i=0;i<9;i++){
for(int j=0;j<9;j++)
cout<<cell[i][j]<<" ";
cout<<endl;
}
int i;
cin>>i;
}