数独游戏的 |
答題得分者是:jow
|
zhongjialong
一般會員 發表:1 回覆:0 積分:0 註冊:2007-10-11 發送簡訊給我 |
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
有趣的演算法, 不知道怎麼來做?
用 Set operators 來做不知道可不可行? 例如: TSudo = 1..9; TSudoSet = set of TSudo; (1)為9 個區域 配置 9 個 TSudoSet, 初值 [1..9], 用於取樣. (2)為9行 配置 9 個 TSudoSet, 初值 [ ], 用於比對 (3)為9列 配置 9 個 TSudoSet, 初值 [ ], 用於比對 (4)9x9個數字格 配置一個 9x9 的陣列 A: array [1..9,1..9] of Byte, 初值 0 (A)總共 27 個 TSudoSet, 將所有TSudoSet初值如上所示. (B)產生1~9的亂數, 去填 9 x 9 的數字格, 將符合條件的數字(TSudo), 從相對應區域的 TSudoSet (項目1) 移除. TSudoSet := TSudoSet - [TSudo]; 或 Exclude(TSudoSet, TSudo); 將該數字加入相對應的 行TSudoSet(項目2) 及 列TSudoSet(項目3) TSudoSet := TSudoSet [TSudo]; 或 Include(TSudoSet, TSudo); (C)當所有初值為[1..9]的9個 區域TSudoSet 都等於空集合([ ]), 則數讀表 應該就完成了. 個人初步想法, 僅供參考...^_^ |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
測試程式碼的寫法與前篇的想法有些修正,
其中 ColSet 和 RowSet 改為以 function 動態取得. [code delphi] unit fMain; interface uses Windows, Graphics, Forms, Classes, Controls, StdCtrls, Dialogs, Grids; type TByteSet = set of Byte; TBytes = array of Byte; TfrmMain = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormPaint(Sender: TObject); private Done: Boolean; ResultTable: array[0..8, 0..8] of Byte; //最後產出之結果 public function SetToBytes(ASet: TByteSet; Range: Integer): TBytes; function ColSet(Index: Integer): TByteSet; function RowSet(Index: Integer): TByteSet; end; var frmMain: TfrmMain; [/code] 測試程式碼下載: http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=90851
編輯記錄
jow 重新編輯於 2007-10-17 01:04:42, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |