線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:7814
推到 Plurk!
推到 Facebook!

数独游戏的

答題得分者是:jow
zhongjialong
一般會員


發表:1
回覆:0
積分:0
註冊:2007-10-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-10-11 21:52:56 IP:59.35.xxx.xxx 訂閱
请问我用DELPHI做数独的时候,有什么办法可以隔离出各个区间?怎么弄出在九个区间内1-9的数字不会重复,在各行和各列也不会重复,而且每个在这个大区间里面又会出现九次,这个要用哪些语言来弄出来?在网上找了很久,自己做了很久也没弄出来,希望各位前辈多帮忙下!在此谢过!
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-10-11 22:57:31 IP:123.193.xxx.xxx 訂閱
有趣的演算法, 不知道怎麼來做?

用 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 重新編輯於 2007-10-11 23:01:01, 註解 無‧
jow 重新編輯於 2007-10-11 23:08:36, 註解 修正步驟‧
jow 重新編輯於 2007-10-11 23:15:57, 註解 新增陣列配置‧
jow 重新編輯於 2007-10-11 23:17:02, 註解 無‧
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-10-17 01:01:50 IP:123.193.xxx.xxx 訂閱
測試程式碼的寫法與前篇的想法有些修正, 
其中 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, 註解 無‧
系統時間:2024-11-21 17:09:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!