怎样在数独中随机的位置产生随机数??

kivincheng 2009-07-17 04:12:43

玩法:在9格宽×9格高的大九宫格中有9个3格宽×3格高的小九宫格,并提供一定数量的数字。根据这些数字,
利用逻辑和推理,在其他的空格上填入1到9的数字。每个数字在每个小九宫格内不能出现一样的数字,
每个数字在每行、每列也不能出现一样的数字。

在9*9的格子里面产生27个数,现在我程序可以暂时确定随机数的位置,但是要产生1-9的随机数而且每行每列每个宫格中数字都不重复,应该怎么办呀???
求各位高手指点一下,不甚感激!!!


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SMAX 1024
main()
{
int i,j;
int m,n,p,Loc,a[27];
srand(time(0));
for(m=0;m <27;m++)
{
a[m]=rand()%81;
for(n=0;n <m;n++)/*判断是否和前面产生的数相同*/
if(a[m]==a[n]) {m--;break;}
}
for(m=0;m <27;m++)
{
j=a[m]%9;
i=(a[m]-j)/9;
p=(i/3)*3+j/3;//判断m处在第几块(宫)
Loc=a[m]+1;

printf("Loc:%2d i:%dj:%d m:%d\n",Loc,i,j,p);
}
// printf("%d ",a[m]+1);
printf("\n");
return 0;
}


/*a[9][9]中编号各宫i:0-8;且每宫内数组由a[(i/3)*3][(i%3)*3]->a[(i/3)*3+2][(i%3)*3+2]构成
其中i又可由i=m%3*3+n%3得到*/

/
...全文
114 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
shen8686 2009-07-21
  • 打赏
  • 举报
回复
建立可选集
在可选集里面随机选择
随机选择一个数据
然后在可选集里排除掉
继续下一个
lingyin55 2009-07-21
  • 打赏
  • 举报
回复
关于数独的程序网上搜下,很多。
taodm 2009-07-21
  • 打赏
  • 举报
回复
发现重复了就再生成嘛,循环到发现一个不重复的为止。
要快一点,就先建立可选集,然后在可选集里挑。
大前置 2009-07-21
  • 打赏
  • 举报
回复
帮顶~~
hoomey 2009-07-17
  • 打赏
  • 举报
回复
sf

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧