查看: 2576|回复: 8
|
用JAVA来写4x4的数独。。。
[复制链接]
|
|
我是初学者,想要用java来写一个4x4的数独游戏,我做了interface,但是不懂怎样random generate number在random的row and column,而且是可以solve到的。。。有没有高手可以帮帮下。。。 |
|
|
|
|
|
|
|
发表于 22-7-2007 02:16 PM
|
显示全部楼层
请问你有学过 hill climbing, simulated annealing之类的东西吗?
[ 本帖最后由 tensaix2j 于 22-7-2007 02:21 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 22-7-2007 11:51 PM
|
显示全部楼层
你可以先用一个基本答案,然后 一行行换位,再一列列换位,
再根据难度把一些数字拿掉,就行了。 |
|
|
|
|
|
|
|

楼主 |
发表于 24-7-2007 08:55 PM
|
显示全部楼层
|
|
|
|
|
|
|

楼主 |
发表于 24-7-2007 08:56 PM
|
显示全部楼层
原帖由 tensaix2j 于 22-7-2007 02:16 PM 发表 
请问你有学过 hill climbing, simulated annealing之类的东西吗?
还没学瓜,不懂什么来的哦。。。 |
|
|
|
|
|
|
|
发表于 25-7-2007 10:19 AM
|
显示全部楼层
这是我很乱的写法。。可以参考。。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define num 9
int ite( void (*fu)(void),int *it,int max ){
for (*it=0;*it<max;fu(),(*it)++);
return 0;
}
int i,j,k,lpt,pt,msk,at,brd[num*num];
void fa(){
(!(brd[i*num+j] || msk & (1<<j)))?
lpt=j, (rand()&1)? pt=1, brd[i*num+j]=k+1,
msk |= (1<<j), j=num:0:0;
}
void fb(){
lpt=-1,pt=0,ite(&fa,&j,num);
(!pt && lpt>=0)?brd[i*num+lpt]=k+1,msk |= (1<<lpt):(lpt<0)?at++,k=-1,i=num:0;
}
void fc(){
(!k)?memset(brd,0,sizeof(int)*num*num):0;msk=0; ite(&fb,&i,num);
}
void fd(){
!(i%num)?puts(""):0;printf("%d",brd);
}
int main(){
srand(time(NULL));
at=0;
ite(fc,&k,num);
printf("attempted : %d",at);
ite(fd,&i,num*num); //final result.
}
[ 本帖最后由 tensaix2j 于 5-8-2007 02:04 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 29-7-2007 11:09 PM
|
显示全部楼层
原帖由 tensaix2j 于 25-7-2007 10:19 AM 发表 
这是我很乱的写法。。可以参考。。
#include
#include
#include
#define num 9
int ite( void (*fu)(void),int *it,int max ){
for (*it=0;*it
的确是很乱的写法。。。
应该考虑加入注解,variable / function name 用一些比较有意思的。。。
还有空格空行。。。 |
|
|
|
|
|
|
|
发表于 13-8-2007 09:03 AM
|
显示全部楼层
我乱写的啦。。。哈哈。。纯属娱乐。。 |
|
|
|
|
|
|
|
发表于 18-8-2007 09:00 AM
|
显示全部楼层
我写不出。。。没有数读的概念。。。不懂怎样做。。。怕放的号码解不出答案。。。 |
|
|
|
|
|
|
| |
本周最热论坛帖子
|