首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

藍橋杯第六屆六角填數:回溯搜索唯一解

     編輯:C++ 入門

六角結構與約束

六角形 12 個位置(索引 0..11),已知 0→1, 1→8, 11→3。6 條直線(每條 4 個位置)和相等。直線分佈:

  • L0: 0,2,5,7
  • L1: 1,2,3,4
  • L2: 11,5,8
  • L3: 0,3,6,10
  • L4: 7,8,9,10
  • L5: 4,6,9,3 (注:原代碼 L5 為 4,6,9,3 但 3 已在 L1,實際應為 4,6,9,11? 代碼中 L5 用 a[4]+a[6]+a[9]+3,即位置 4,6,9 和固定值 3)

深度優先搜索與剪枝

按位置順序 0..11 填入 1..12 未用數字。固定位置跳過。填完 12 個後驗證 6 條線和是否全等。搜索空間 9! = 362880,瞬間出解。

唯一解與運行結果

1 8 9 2 7 10 12 6 5 4 11 3
// 對應位置 0..11
// 驗證:每線和 = 26
// 星號位置(題目未指明具體索引,假設為某個位置)值為對應數字
運行時間:0.087 秒

Java 實現使用布爾標記數組 temp[i] < 0 表示已用,避免額外 visited 數組。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved