回朔算法2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
回朔算法2
void TuiLi::SD_in(){//获取题目信息int data[]
={0,5,0,0,3,0,0,0,0,0,0,1,6,0,0,9,0,8,3,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,7,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};int
i,j,z=0;for(i=0;i}
void TuiLi::sd_out(){int i,j,z=0;for(i=0;ivoid TuiLi::sd_print(){int
i,j,z=0;sd_out();GetLocalTime(&TIME);//获得系统当前时间printf(“找到一个数独
解获取时间为:%d 年%d 月%d 日%d 时%d 分%d 秒”,
TIME.wYear,TIME.wMonth,TIME.wDay,TIME.wHour,TIME.wMinute,TIME.wSec ond);for(i=0;i}printf(““);}printf(““);}
int TuiLi::ok_sd() //解数独用剪枝函数{int i,j,x;sd_out();
for(x=0;xfor(x=0;xreturn 0;}
int TuiLi::go_sd() //解数独入口函数{int i,c=0;//获取题目信息SD_in();//回溯根
节点初始值,调整这个值能调整回溯进度if(!sudu_ji[0])sudu[0]=1;i=0;while(1)
{//sd_print();//Sleep(10);if(sudu[i]=80){//已经到了最后一个节点也就是找到了一
个解先输出它sd_print();//然后尝试找到其它的解if(!sudu_ji[80])sudu[80]
++;c++;if(c>=10){printf(“此题解太多只输出前面10 个解!”);return0;}continue;}//
回溯点值没有产生冲突扩展他尝试开始下一个节点i++;if(!sudu_ji[i])sudu[i]=1;}
else{//超过回溯点取值范围//此回溯点已死复位if(!sudu_ji[i])sudu[i]=0;//退回前
一回溯点i--;if(sudu_ji[i]) i--;//回溯后的当前回溯节点是题目已经标记过的就在
往前回溯一步
if(ireturn 0;}
void TuiLi::hh_init(){//数据初始化int i,j;printf(“请输入皇后问题的解题规模:。