16,466
社区成员
发帖
与我相关
我的任务
分享
else{
int blank=0;
for(int i=0;i<9;i++)
for(int j=0;j<9;j++){
if(sd[i][j]==0) blank++;
}
dfs(blank);
condition=2;//
condition_show=0;
show(0,0,m_a11);
。。。。(省略81-2个)
show(8,8,m_z99);
}
}
void CShuduDlg::refresh() //????
{
CFont m_font;
m_font.CreateFont(33,0,0,0,700,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,_T("????"));
for (int index=IDC_EDIT_a1;index<=IDC_EDIT_z9;index++)
{
int temp=index-IDC_EDIT2;
if (sd_title[temp/3][temp%3]==0)
{
if(sd_title[temp/3][temp%3]!=0){
SetDlgItemInt(index,sd_title[temp/3][temp%3]);
CEdit* pedit=NULL;
pedit=(CEdit*)GetDlgItem(index);
pedit->SetLimitText(1);
pedit->SetFont(&m_font);
pedit->EnableWindow(true);
}
else{
SetDlgItemText(index,_T(""));
CEdit* pedit=NULL;
pedit=(CEdit*)GetDlgItem(index);
pedit->EnableWindow(true);
}
}
else{
SetDlgItemInt(index,sd_title[temp/3][temp%3]);
CEdit* pedit=NULL;
pedit=(CEdit*)GetDlgItem(index);
pedit->SetLimitText(1);
pedit->SetFont(&m_font);
pedit->EnableWindow(false);
}
}
UpdateWindow();
Sleep(50);
}
int funHx(int row, int col,int mark[]) //????????????
{
int count=0;
for(int i=0;i<10;i++) mark[i]=0;
for(i=0;i<9;i++){
mark[sd_title[row][i]]=1;//?
mark[sd_title[i][col]]=1;//?
}
row=row/3*3;
col=col/3*3;
for(i=0;i<3;i++){
for(int j=0;j<3;j++)
mark[sd_title[row+i][col+j]]=1;
}
for(i=1;i<10;i++)
if(mark[i]==0) count++;
return count;
}
bool CShuduDlg::dfs(int blank) //?????
{
int min=10;
int ii,jj;
int count;
int mark[10];
if(blank<=0) return true;
for(int j=0;j<9;j++){
if(sd_title[i][j]!=0) continue;
count=funHx(i,j,mark);
if(count<=1) {min=count;ii=i;jj=j;break;}
if(count<min){min=count;ii=i;jj=j;}
}
if(min==0||min==10) return false;
else if(min==1){
for(int i=1;i<10;i++)
if(mark[i]==0){
sd_title[ii][jj]=i;
blank--;
refresh();
if(dfs(blank)) return true;
sd_title[ii][jj]=0;
refresh();
blank++;
}
else{
sd_title[ii][jj]=i;
refresh();
sd_title[ii][jj]=0;
}
}
else{
count=funHx(ii,jj,mark); //??????1,????????????????
for(int i=1;i<10;i++){
if(mark[i]==0){
sd_title[ii][jj]=i;
blank--;
refresh();
if(dfs(blank)) return true;
sd_title[ii][jj]=0;
refresh();
blank++;
}
else{
sd_title[ii][jj]=i;
refresh();
sd_title[ii][jj]=0;
}
}
}
return false;
}
void CShuduDlg::OnBUTTONread()
{
// TODO: Add your control notification handler code here
CString FilePathName;
CFileDialog dlg(true,".txt","Sudoku.txt",OFN_OVERWRITEPROMPT,"Txt Files (*.txt)|*.txt|Data Files (*.dat)|*.dat|All Files (*.*)|*.*||");
dlg.m_ofn.lpstrInitialDir=_T(".\\");
if(dlg.DoModal()==IDOK)
FilePathName=dlg.GetPathName();
ifstream ifile;
ifile.open(FilePathName);
char c_read[7];
for(int r=0;r<7;r++) ifile>>c_read[r];
ifile.get();
bool b_read=true;
if(c_read[0]!='S') {b_read=false;goto SSS;}
if(c_read[1]!='u') {b_read=false;goto SSS;}
if(c_read[2]!='d') {b_read=false;goto SSS;}
if(c_read[3]!='o') {b_read=false;goto SSS;}
if(c_read[4]!='k') {b_read=false;goto SSS;}
if(c_read[5]!='u') {b_read=false;goto SSS;}
if(c_read[6]!=':') {b_read=false;goto SSS;}
SSS:
if(b_read)
{
for(int i=0;i<9;i++)
for(int j=0;j<9;j++) ifile>>sd_title[i][j];
ifile.close();
read_noAnswer=1;
//Öظ´newÖеIJÙ×÷
OnBUTTONclear();
condition=1;
k=::GetTickCount();
tips_switch=2;
tips_switchs=2;
tips_switch=tips_switchs%2;
for(int x=0;x<9;x++)
for(int y=0;y<9;y++){
sd_read[x][y]=sd_title[x][y];
}
setReadOnly();
}
else
(特殊字符删掉了)
}