前几天刷人人的时候,偶然看到了一个帖子: “芬兰数学家因卡拉花费3个月设计出了世界上迄今难度最大的数独游戏。”下图是这个数独的截图:

游戏规则就是: 玩家需要根据9×9格子内的已知数字,推理出剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3×3)内的数字,均含1到9,且不重复。
于是乎,作为一个开发人员的我,对这种“最难”之类的字眼比较敏感的,果断写个程序来运算它。
大概的思路是计算当前的九宫格中“最容易”判断的格子,然后列举出这个格子的各种可能,然后用递归法运算。程序代码见下:
*&———————————————————————*
*& Report ZTEST11_RAY *
*& *
*&———————————————————————*
*& author : woss
*& date : 2012/07/05
*& description : ########## *
*& *
*&———————————————————————*
REPORT ZTEST11_RAY .
DATA: BEGIN OF WA_CELLS,
C1R1 TYPE I,
C1R2 TYPE I,
C1R3 TYPE I,
C1R4 TYPE I,
C1R5 TYPE I,
C1R6 TYPE I,
C1R7 TYPE I,
C1R8 TYPE I,
C1R9 TYPE I,
C2R1 TYPE I,
C2R2 TYPE I,
C2R3 TYPE I,
C2R4 TYPE I,
C2R5 TYPE I,
C2R6 TYPE I,
C2R7 TYPE I,
C2R8 TYPE I,
C2R9 TYPE I,
C3R1 TYPE I,
C3R2 TYPE I,
C3R3 TYPE I,
C3R4 TYPE I,
C3R5 TYPE I,
C3R6 TYPE I,
C3R7 TYPE I,
C3R8 TYPE I,
C3R9 TYPE I,
C4R1 TYPE I,
C4R2 TYPE I,
C4R3 TYPE I,
C4R4 TYPE I,
C4R5 TYPE I,
C4R6 TYPE I,
C4R7 TYPE I,
C4R8 TYPE I,
C4R9 TYPE I,
C5R1 TYPE I,
C5R2 TYPE I,
C5R3 TYPE I,
C5R4 TYPE I,
C5R5 TYPE I,
C5R6 TYPE I,
C5R7 TYPE I,
C5R8 TYPE I,
C5R9 TYPE I,
C6R1 TYPE I,
C6R2 TYPE I,
C6R3 TYPE I,
C6R4 TYPE I,
C6R5 TYPE I,
C6R6 TYPE I,
C6R7 TYPE I,
C6R8 TYPE I,
C6R9 TYPE I,
C7R1 TYPE I,
C7R2 TYPE I,
C7R3 TYPE I,
C7R4 TYPE I,
C7R5 TYPE I,
C7R6 TYPE I,
C7R7 TYPE I,
C7R8 TYPE I,
C7R9 TYPE I,
C8R1 TYPE I,
C8R2 TYPE I,
C8R3 TYPE I,
C8R4 TYPE I,
C8R5 TYPE I,
C8R6 TYPE I,
C8R7 TYPE I,
C8R8 TYPE I,
C8R9 TYPE I,
C9R1 TYPE I,
C9R2 TYPE I,
C9R3 TYPE I,
C9R4 TYPE I,
C9R5 TYPE I,
C9R6 TYPE I,
C9R7 TYPE I,
C9R8 TYPE I,
C9R9 TYPE I,
END OF WA_CELLS.
DATA: BEGIN OF WA_VAL,
VAL TYPE I,
END OF WA_VAL.
DATA: IT_VAL LIKE TABLE OF WA_VAL.
DATA: G_FLAG TYPE C.
TYPE-POOLS ole2 .
DATA: l_filename1(100) TYPE c.
DATA: v_excel TYPE ole2_object. ” Excel object
DATA: l_books TYPE ole2_object, ” list of workbooks
l_book TYPE ole2_object, ” workbook
sheet TYPE ole2_object, ” Worksheet object
range TYPE ole2_object,
cell TYPE ole2_object,
row TYPE ole2_object,
columns TYPE ole2_object,
borders TYPE ole2_object.
DATA: t_books TYPE ole2_object, ” list of workbooks
t_book TYPE ole2_object, ” workbook
t_sheet TYPE ole2_object, ” Worksheet object
a_range TYPE ole2_object,
t_range TYPE ole2_object.
DATA: v_application TYPE ole2_object.
DATA: g_display TYPE c.
**———————————————————————*
** 选择屏幕参数 *
**———————————————————————*
SELECTION-SCREEN BEGIN OF BLOCK BK2 WITH FRAME TITLE TEXT-002.
PARAMETERS: P_FILE LIKE RCGFILETR-FTFRONT OBLIGATORY DEFAULT ‘C:\Users\Wosslr\Desktop\最难九宫格.xls’.
SELECTION-SCREEN END OF BLOCK BK2.
**———————————————————————*
** A T - S E L E C T I O N - S C R E E N
**———————————————————————*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
CALL FUNCTION ‘KD_GET_FILENAME_ON_F4′
EXPORTING
STATIC = ‘X’
MASK = ‘,*.XLS,*.xls,*.XLSX,*.xlsx.’
CHANGING
FILE_NAME = P_FILE.
**———————————————————————*
** S T A R T - O F - S E L E C T I O N
**———————————————————————*
START-OF-SELECTION.
PERFORM INITIAL_CELLS.
PERFORM FILL_CELL CHANGING WA_CELLS G_FLAG.
IF G_FLAG EQ ‘X’.
PERFORM DISPLAY.
ENDIF.
*&———————————————————————*
*& Form INITIAL_CELLS
*&———————————————————————*
* text
*———————————————————————-*
* –> p1 text
* <– p2 text
*———————————————————————-*
FORM INITIAL_CELLS .
g_display = ‘X’.
FIELD-SYMBOLS : <fs> TYPE ANY.
DATA: l_fieldname TYPE fieldname.
DATA: L_COL TYPE I,
L_ROW TYPE I,
L_N_COL TYPE N,
L_N_ROW TYPE N.
PERFORM startexcel_new using P_FILE ‘Sheet1′.
DO 9 TIMES.
L_COL = SY-INDEX.
L_N_COL = L_COL.
DO 9 TIMES.
L_ROW = SY-INDEX.
L_N_ROW = L_ROW.
CONCATENATE ‘C’ L_N_COL ‘R’ L_N_ROW INTO l_fieldname.
ASSIGN COMPONENT l_fieldname OF STRUCTURE WA_CELLS TO <fs>.
PERFORM READ_TMP_PROPERTY_EXCEL