【原创】数独C语言全解 | 您所在的位置:网站首页 › 数独数独规则 › 【原创】数独C语言全解 |
1、初始输入部分 关于初始输入部分,为了简便输入,结合数独的特点,采用3位数连续输入的方式来初始输入,比如,输入123表示第1行第2列的初始值为3,输入798表示第7行第9列的初始值为8。如果输入错误了,要进行清除,则采用初始值置0的方式来处理。 同时对错误的输入进行简单甄别(完全的甄别错误输入,是一个比较麻烦的事情,不做完整处理)。 代码如下: //初始输入 bool blinitfail=true; //输入初始值 do{ int x=0,y=0,i=0,j=0,k=0; printf("初始值输入说明:\n输入三位数,分别表示行数、列数,初始值,最后回车结束:\n"); printf("如输入'123',表示第1行第2列的初始数值为3\n"); printf("如需删除已设置初始值,可将该处设置为0值。如'130'表示将第1行第3列初始值删除\n"); printf("如果输入初始值结束,请输入(100)\n"); while(1){ scanf("%d",&j); if(j==100){ printf("初始值输入结束!以下列出已设置内容\n\n"); prtsdk(sdk); printf("是否需要更改,如需更改,请输入0,其他字符则自动验证数独,无误后开始解题\n"); scanf("%d",&k); if(k!=0)break;else { printf("现在可以继续录入初始值\n要删除初始值可设置该处为0\n"); continue; } } x=j/100; y=(j%100)/10; i=j%10; if((x0)&&(y0)&&(i=0)){ sdk[x-1][y-1]=i; if(i==0)printf("已经清除(%d,%d)处的初始值\n",x,y); else printf("已设置(%d,%d)=%d\n\n",x,y,sdk[x-1][y-1]); }else{ printf("\n数据不符合要求,本次未设置初始值。\n"); } printf("继续输入初始值或结束(输入100)\n"); } //验证初始值是否满足要求 bool blt=false; blt=chkinit(0,sdk); if(blt==true){ blinitfail=true; printf("初始数独有误,重置全部为0\n\n"); for(i=0;i sdk[i][j]=0; } } printf("请重新输入初始数据\n"); }else{ printf("初始值验证通过,需解题数独为\n"); prtsdk(sdk); blinitfail=false; } //prtsdk(sdk); blt=false;//恢复blt }while(blinitfail); //初始值输入结束 |
CopyRight 2018-2019 实验室设备网 版权所有 |