2015-06-21 47 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次被淘汰。