解数独求答案

来源:百度知道 编辑:UC知道 时间:2024/05/21 11:03:11
4*36*****
*****1*24
*1**4*5**
***9*4*6*
3*2***4*9
*7*1*3***
**1*9**4*
24*3*****
*****82*7

谢谢拉!请高手解一下1

423685971
895731624
617249538
158924763
362857419
974163852
781592346
249376185
536418297

我的C解题代码:

#include<algorithm>

bool vst[9][9][10];
int cnt[9][9],idx[81],top;
char map[9][11];
bool cmp(int p,int q){ return cnt[p/9][p%9]<cnt[q/9][q%9]; }
void update(int r,int c){
int i;
int br=r/3*3;
int bc=c/3*3;
memset(vst[r][c],0,10);
for(i=0;i<9;i++){
vst[r][c][map[i][c]]=1;
vst[r][c][map[r][i]]=1;
vst[r][c][map[br+i/3][bc+i%3]] = 1;
}
}

int dfs(int dep){
if(dep==top) return 1;
int r=idx[dep]/9;
int c=idx[dep]%9;
update(r,c);
int i,k;
for(k=1;k<=9;k++)
if(!vst[r][c][k]){
map[r][c]=k;
if(dfs(dep+1))
return 1;
}
map[r][c]=0;
return 0;
}

void solve(){
memset(cnt,0,sizeof(cnt));
int r,c,i,j,k;
for(r=