2015-06-21 74 views
1

任务是解决方形麻烦的难题。一个numbrix拼图由一个字段n*n组成,每个单元格可以包含一个数字1 -> n*n。任务是解决这个难题,并创建一条从号码为1的单元到号码为n*n的单元。 实例与解决方案:用Perl解决numbrix难题

... ... 017 ... ... 
... 021 ... 023 ... 
005 ... ... ... 013 
... 003 ... 001 ... 
... ... 009 ... ... 

解决方案:

019 018 017 016 015 
020 021 022 023 014 
005 004 025 024 013 
006 003 002 001 012 
007 008 009 010 011 

我的老师给了我们一个包含一些步骤的文件(通过他的解决方案perl程序打印)。但我无法确定减少列表的步骤。

什么我的老师的程序打印:

... ... 017 ... ... 
... 021 ... 023 ... 
005 ... ... ... 013 
... 003 ... 001 ... 
... ... 009 ... ... 


1 | 2 < 3 | 4 <5> 6 | 7 < 8 <9> 10 | 11 < 12 <13> 14 | 15 < 16 <17> 18 | 19 < 20 < 21 | 22 <23> 24 > 25 

1.1:  15 19 
1.2:  16 18 20 
1.4:  16 18 22 24 
1.5:  11 15 25 
2.1:  4 6 20 
2.3:  16 18 20 22 24 
2.5:  12 14 22 24 
3.2:  2 4 6 20 
3.3:  7 11 15 19 25 
3.4:  12 14 22 24 
4.1:  2 4 6 
4.3:  2 8 10 
4.5:  12 14 
5.1:  7 
5.2:  2 8 10 
5.4:  8 10 
5.5:  7 11 

1.1:  19 
1.2:  18 20 
1.4:  16 24 
1.5:  15 25 
2.1:  20 
2.3:  16 18 20 22 24 
2.5:  14 24 
3.2:  4 6 20 
3.3:  7 11 15 19 25 
3.4:  12 14 24 
4.1:  4 6 
4.3:  2 8 10 
4.5:  12 
5.1:  7 
5.2:  8 
5.4:  10 
5.5:  11 

# cell(s) with only one candidate: (1.1=19) (2.1=20) (1.2=18) (4.5=12) (5.1=7) (5.2=8) (5.4=10) (4.3=2) (5.5=11) 

019 018 017 ... ... 
020 021 ... 023 ... 
005 ... ... ... 013 
... 003 002 001 012 
007 008 009 010 011 

1.4:  16 24 
1.5:  15 25 
2.3: * 16 22 24 
2.5:  14 24 
3.2: * 4 
3.3: * 15 25 
3.4: * 14 24 
4.1:  4 6 

# cell(s) with only one candidate: (3.2=4) (4.1=6) 

019 018 017 ... ... 
020 021 ... 023 ... 
005 004 ... ... 013 
006 003 002 001 012 
007 008 009 010 011 

1.4:  16 24 
1.5:  15 25 
2.3:  16 22 24 
2.5:  14 24 
3.3:  15 25 
3.4:  14 24 

# cell(s) with only one candidate: (2.3=22) 

019 018 017 ... ... 
020 021 022 023 ... 
005 004 ... ... 013 
006 003 002 001 012 
007 008 009 010 011 

1.4:  16 24 
1.5:  15 25 
2.5:  14 24 
3.3: * 25 
3.4: * 24 

# cell(s) with only one candidate: (3.3=25) (1.5=15) (3.4=24) (1.4=16) (2.5=14) 

019 018 017 016 015 
020 021 022 023 014 
005 004 025 024 013 
006 003 002 001 012 
007 008 009 010 011 

我的解决方案能做些什么:

我有一个数据结构与跟踪的细胞(1.1为例),它的候选人。我可以打印出第一个列表。

我的问题是什么:

我不明白他怎么可以降低每个细胞的候选人数。例如:第一个列表说明单元格1.1的可能候选者是15和19.(我有这整个列表)。但是突然之间,他可以减少列表,说单元格1.1只能包含数字:19.他如何做到这一点? (我不需要任何代码,我不明白这个减少的逻辑)。

回答

-1

你不是要求代码,只是为了逻辑。所以这可能是你正在寻找的东西:
为了保留一个候选人(例如,对于1.1的15或19)
它需要两个接壤候选人(例如14和16为15,或18和20为19)在两个接壤的单元格(例如1.2和2.1)中的
。 这对于19而言并不是15,因此19次停留但是15次被淘汰。