|
发表于 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 编辑 ] |
|