数独的一种实现方式

 

 

生成一个数独的解:

 

定义: 一个 3*3 的整体我称之为box, 那一个9*9 的数独盘里就有 9 box,编号依次为1-9

 

 

 

 

 

 

 

 

 

 

Box 1

 

 

Box 2

 

 

Box 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Box 4

 

 

Box 5

 

 

Box 6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Box 7

 

 

Box 8

 

 

Box 9

 

 

 

 

 

 

 

 

 

 

 

 

观察得到的事实:

 

1.  1-9每个数字 在每个box 里也填一次,每行也出现一次,每列也出现一次,于根据这个规则,我们可以把 这个数独盘里的所有1都一次填下去:

 

1

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

1

 

2. 接着,我们可以在1 的下面把 2也填下去:

 

1

 

 

 

 

 

2

 

 

2

 

 

1

 

 

 

Box 3

 

 

 

 

2

 

 

1

 

 

 

1

 

 

 

 

 

2

 

 

2

 

 

1

 

 

 

 

 

 

 

 

2

 

 

1

 

 

 

1

 

 

 

 

 

2

 

 

2

 

 

1

 

 

 

 

 

 

 

 

2

 

 

1

注意: 填的规则是这样, 如果 1 的正下方有一个空格,并且该空格与1在同一个box内,则填入2, 否则,在1的正上方隔两格的地方填入2, 如上图的Box 3 里的效果所示。

 

3. 同理,我们以同样的规则填入 3 4

1

 

 

3

 

 

2

 

 

2

 

 

1

 

 

3

 

 

3

 

 

2

 

 

1

 

 

 

1

 

 

3

 

 

2

 

 

2

 

 

1

 

 

3

 

 

3

 

 

2

 

 

1

 

 

 

1

 

 

3

 

 

2

 

 

2

 

 

1

 

 

3

 

 

3

 

 

2

 

 

1

 

1

4

 

3

 

 

2

 

 

2

 

 

1

4

 

3

 

 

3

 

 

2

 

 

1

4

 

 

1

4

 

3

 

 

2

 

 

2

 

 

1

4

 

3

 

 

3

 

 

2

 

 

1

4

4

 

1

 

 

3

 

 

2

 

 

2

4

 

1

 

 

3

 

 

3

 

 

2

4

 

1

 

 

。。。

 

5. 如果每次都按 1 – 9 顺序填入数独盘,则每次都会得到同样的结果,但作为程序设计人,我们可以打乱 1- 9 的顺序填入数独盘,这样就可以得到不同的效果

 

6. 待我们填入了所有的9个数,我们就可以将i行(列)与j行(列)(0<|i - j|<3 )所有元素进行交换,交换后的数独排列仍会是一个数独的解

 

 

实现的java 代码:

box.java

 

 

Board.java

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值