• 大小: 3.67MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-01
  • 语言: 其他
  • 标签: 数独,  

资源简介

舞蹈链算法求解数独

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 

FILE *ofp;
int result=0; //结果数
//输出可行的解
void Sudoku(int a[9][9]int n);

void print(int a[9][9])

{

result++;

printf(“第%d个填法为:\n“result);
fprintf(ofp“第%d个填法为:\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列的数设为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;

}

//数独求解函数

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个数的行数和列数

if(a[i][j] != 0) //已经有原始数据

{

if(n == 80) //是最后一个格子,输出可行解
{
print(temp);
}
else //不是最后一个格子,求下一个格子

Sudoku(tempn+1);

}

else //没有数据

{
//尝试填入1-9数字
for(int k=1;k<=9;k++)

{

bool flag=check(tempijk);

if(flag) //第i行、第j列可以是k
 
{

temp[i][j]=k; //设为k
if(n == 80)
{
print(temp);
}
else
Sudoku(tempn+1);

temp[i][j]=0; //恢复为0,判断下一个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(“数独的解为:\n\n“);
    while(true) 
{
int i=0 j=0 k=0;
if(!p)//文件读取结束则跳出循环
break;
for (i = 0; i < 9; ++i) 
{
p=ReadData(fp buf);//每次调用文件指针fp会自动后移一行
if(!p)//文件读取结束则跳出循环
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);//输入每组间的数字
if(result==0)
printf(“此数独无解!“);
result=0;
}
fclose(fp); 
fclose(ofp);
return 0;

}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件    1926144  2016-12-12 23:26  求解数独\数独所有解\Debug\shudu_all.bsc

     文件     180274  2017-01-04 20:51  求解数独\数独所有解\Debug\shudu_all.exe

     文件     190216  2017-01-04 20:51  求解数独\数独所有解\Debug\shudu_all.ilk

     文件      18538  2017-01-04 20:51  求解数独\数独所有解\Debug\shudu_all.obj

     文件    3566388  2016-12-13 21:30  求解数独\数独所有解\Debug\shudu_all.pch

     文件     467968  2017-01-04 20:51  求解数独\数独所有解\Debug\shudu_all.pdb

     文件          0  2016-12-12 23:26  求解数独\数独所有解\Debug\shudu_all.sbr

     文件     148480  2017-01-04 21:08  求解数独\数独所有解\Debug\vc60.idb

     文件      77824  2017-01-04 20:51  求解数独\数独所有解\Debug\vc60.pdb

     文件       1017  2016-12-08 21:59  求解数独\数独所有解\input1.txt

     文件       1017  2016-12-11 23:42  求解数独\数独所有解\input4.txt

     文件       5924  2017-01-04 21:08  求解数独\数独所有解\output.txt

     文件       3161  2017-01-04 21:18  求解数独\数独所有解\shudu_all.cpp

     文件       3437  2016-12-13 20:37  求解数独\数独所有解\shudu_all.dsp

     文件        526  2016-12-13 21:56  求解数独\数独所有解\shudu_all.dsw

     文件      41984  2017-01-04 21:18  求解数独\数独所有解\shudu_all.ncb

     文件      48640  2017-01-04 21:18  求解数独\数独所有解\shudu_all.opt

     文件        252  2017-01-04 21:02  求解数独\数独所有解\shudu_all.plg

     文件     531684  2017-01-04 21:12  求解数独\数独求解.docx

     文件       6414  2017-01-04 21:16  求解数独\舞蹈链\dancelink.cpp

     文件       3437  2016-12-22 21:11  求解数独\舞蹈链\dancelink.dsp

     文件        526  2016-12-22 22:02  求解数独\舞蹈链\dancelink.dsw

     文件      41984  2017-01-04 21:18  求解数独\舞蹈链\dancelink.ncb

     文件      48640  2017-01-04 21:18  求解数独\舞蹈链\dancelink.opt

     文件       1151  2017-01-04 21:16  求解数独\舞蹈链\dancelink.plg

     文件    1934336  2016-12-17 23:01  求解数独\舞蹈链\Debug\dancelink.bsc

     文件     221230  2017-01-04 21:16  求解数独\舞蹈链\Debug\dancelink.exe

     文件     220692  2017-01-04 21:16  求解数独\舞蹈链\Debug\dancelink.ilk

     文件      23582  2017-01-04 21:16  求解数独\舞蹈链\Debug\dancelink.obj

     文件    3570680  2016-12-22 21:15  求解数独\舞蹈链\Debug\dancelink.pch

............此处省略18个文件信息

评论

共有 条评论

相关资源