-
大小: 3.67MB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2023-10-01
- 語(yǔ)言: 其他
- 標(biāo)簽: 數(shù)獨(dú),??
資源簡(jiǎn)介
舞蹈鏈算法求解數(shù)獨(dú)

代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
FILE?*ofp;
int?result=0;?//結(jié)果數(shù)
//輸出可行的解
void?Sudoku(int?a[9][9]int?n);
void?print(int?a[9][9])
{
result++;
printf(“第%d個(gè)填法為:\n“result);
fprintf(ofp“第%d個(gè)填法為:\n“result);
for(int?i=0;i<9;i++)
{
for(int?j=0;j<9;j++)
{
printf(“%d?“a[i][j]);
fprintf(ofp“%d?“a[i][j]);
if((j==2)||(j==5))
{
printf(“?“);
fprintf(ofp“?“);
}
}
printf(“\n“);
fprintf(ofp“\n“);
if((i==2)||(i==5))
{
printf(“\n“);
fprintf(ofp“\n“);
}
}
printf(“\n“);
fprintf(ofp“\n“);
//getchar();
}
//判斷是否可以將第i行、第j列的數(shù)設(shè)為k
bool?check(int?a[9][9]int?iint?jint?k)
{
int?mn;
//判斷行
for(n=0;n<9;n++)
{
if(a[i][n]?==?k)
return?false;
}
//判斷列
for(m=0;m<9;m++)
{
if(a[m][j]?==?k)
return?false;
}
//判斷所在小九宮格
int?t1=(i/3)*3t2=(j/3)*3;
for(m=t1;m
{
for(n=t2;n
{
if(a[m][n]?==?k)
return?false;
}
}
//可行,返回true
return?true;
}
//數(shù)獨(dú)求解函數(shù)
void?Sudoku(int?a[9][9]int?n)
{
int?temp[9][9];
int?ij;
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
temp[i][j]=a[i][j];
}
i=n/9;?j=n%9;?//求出第n個(gè)數(shù)的行數(shù)和列數(shù)
if(a[i][j]?!=?0)?//已經(jīng)有原始數(shù)據(jù)
{
if(n?==?80)?//是最后一個(gè)格子,輸出可行解
{
print(temp);
}
else?//不是最后一個(gè)格子,求下一個(gè)格子
Sudoku(tempn+1);
}
else?//沒有數(shù)據(jù)
{
//嘗試填入1-9數(shù)字
for(int?k=1;k<=9;k++)
{
bool?flag=check(tempijk);
if(flag)?//第i行、第j列可以是k
?
{
temp[i][j]=k;?//設(shè)為k
if(n?==?80)
{
print(temp);
}
else
Sudoku(tempn+1);
temp[i][j]=0;?//恢復(fù)為0,判斷下一個(gè)k
}
}
}
}
char?*ReadData(FILE?*fp?char?*buf)
{
return?fgets(buf?1024?fp);//讀取一行到buf
}
int?main()
{
int?a[9][9]={0};
FILE?*fp;
char?*buf?*p;
LARGE_INTEGER?freq?t0?t1;
QueryPerformanceFrequency(&freq);
buf=(char*)malloc(1024*sizeof(char));
fp=fopen(“input1.txt“?“r“);
ofp=fopen(“output.txt““w“);
printf(“數(shù)獨(dú)的解為:\n\n“);
????while(true)?
{
int?i=0?j=0?k=0;
if(!p)//文件讀取結(jié)束則跳出循環(huán)
break;
for?(i?=?0;?i?9;?++i)?
{
p=ReadData(fp?buf);//每次調(diào)用文件指針fp會(huì)自動(dòng)后移一行
if(!p)//文件讀取結(jié)束則跳出循環(huán)
break;
printf(“%s“buf);
fprintf(ofpbuf);
for?(j?=?0;?j?9;?++j)
{
a[i][j]=buf[j]-‘0‘;
}
}
fprintf(ofp“\n“);
QueryPerformanceCounter(&t0);
Sudoku(a0);
QueryPerformanceCounter(&t1);
_int64?time?=?(((t1.QuadPart-t0.QuadPart)*1000000)/freq.QuadPart);
printf(“%dus\n“time);
fprintf(ofp“%dus\n“time);
p=ReadData(fp?buf);//輸入每組間的數(shù)字
if(result==0)
printf(“此數(shù)獨(dú)無解!“);
result=0;
}
fclose(fp);?
fclose(ofp);
return?0;
}
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????1926144??2016-12-12?23:26??求解數(shù)獨(dú)\數(shù)獨(dú)所有解\Debug\shudu_all.bsc
?????文件?????180274??2017-01-04?20:51??求解數(shù)獨(dú)\數(shù)獨(dú)所有解\Debug\shudu_all.exe
?????文件?????190216??2017-01-04?20:51??求解數(shù)獨(dú)\數(shù)獨(dú)所有解\Debug\shudu_all.ilk
?????文件??????18538??2017-01-04?20:51??求解數(shù)獨(dú)\數(shù)獨(dú)所有解\Debug\shudu_all.obj
?????文件????3566388??2016-12-13?21:30??求解數(shù)獨(dú)\數(shù)獨(dú)所有解\Debug\shudu_all.pch
?????文件?????467968??2017-01-04?20:51??求解數(shù)獨(dú)\數(shù)獨(dú)所有解\Debug\shudu_all.pdb
?????文件??????????0??2016-12-12?23:26??求解數(shù)獨(dú)\數(shù)獨(dú)所有解\Debug\shudu_all.sbr
?????文件?????148480??2017-01-04?21:08??求解數(shù)獨(dú)\數(shù)獨(dú)所有解\Debug\vc60.idb
?????文件??????77824??2017-01-04?20:51??求解數(shù)獨(dú)\數(shù)獨(dú)所有解\Debug\vc60.pdb
?????文件???????1017??2016-12-08?21:59??求解數(shù)獨(dú)\數(shù)獨(dú)所有解\input1.txt
?????文件???????1017??2016-12-11?23:42??求解數(shù)獨(dú)\數(shù)獨(dú)所有解\input4.txt
?????文件???????5924??2017-01-04?21:08??求解數(shù)獨(dú)\數(shù)獨(dú)所有解\output.txt
?????文件???????3161??2017-01-04?21:18??求解數(shù)獨(dú)\數(shù)獨(dú)所有解\shudu_all.cpp
?????文件???????3437??2016-12-13?20:37??求解數(shù)獨(dú)\數(shù)獨(dú)所有解\shudu_all.dsp
?????文件????????526??2016-12-13?21:56??求解數(shù)獨(dú)\數(shù)獨(dú)所有解\shudu_all.dsw
?????文件??????41984??2017-01-04?21:18??求解數(shù)獨(dú)\數(shù)獨(dú)所有解\shudu_all.ncb
?????文件??????48640??2017-01-04?21:18??求解數(shù)獨(dú)\數(shù)獨(dú)所有解\shudu_all.opt
?????文件????????252??2017-01-04?21:02??求解數(shù)獨(dú)\數(shù)獨(dú)所有解\shudu_all.plg
?????文件?????531684??2017-01-04?21:12??求解數(shù)獨(dú)\數(shù)獨(dú)求解.docx
?????文件???????6414??2017-01-04?21:16??求解數(shù)獨(dú)\舞蹈鏈\danceli
?????文件???????3437??2016-12-22?21:11??求解數(shù)獨(dú)\舞蹈鏈\danceli
?????文件????????526??2016-12-22?22:02??求解數(shù)獨(dú)\舞蹈鏈\danceli
?????文件??????41984??2017-01-04?21:18??求解數(shù)獨(dú)\舞蹈鏈\danceli
?????文件??????48640??2017-01-04?21:18??求解數(shù)獨(dú)\舞蹈鏈\danceli
?????文件???????1151??2017-01-04?21:16??求解數(shù)獨(dú)\舞蹈鏈\danceli
?????文件????1934336??2016-12-17?23:01??求解數(shù)獨(dú)\舞蹈鏈\Debug\danceli
?????文件?????221230??2017-01-04?21:16??求解數(shù)獨(dú)\舞蹈鏈\Debug\danceli
?????文件?????220692??2017-01-04?21:16??求解數(shù)獨(dú)\舞蹈鏈\Debug\danceli
?????文件??????23582??2017-01-04?21:16??求解數(shù)獨(dú)\舞蹈鏈\Debug\danceli
?????文件????3570680??2016-12-22?21:15??求解數(shù)獨(dú)\舞蹈鏈\Debug\danceli
............此處省略18個(gè)文件信息
評(píng)論
共有 條評(píng)論