回 帖 发 新 帖 刷新版面

主题:一个大九宫格、含小九宫格的游戏

8
8     5 7 2 3
7   2 1   6   4
1       4     8 9    
     9   5   4       
4 3     8       1  
   2   3   5 7   4    
     1 7 6 4     8
       8
数字魔方的游戏规则:
1、在9×9的大九宫格内,已给定若干数字,其他宫位留白,玩家需要自己按照逻辑推敲出剩下的空格里是什么数字;
2、必须满足的条件:每一行与每一列都有1到9的数字,每个小九宫格里也有1到9的数字,并且一个数字在每行、每列及每个小九宫里只能出现一次。

回复列表 (共14个回复)

沙发

要说重新来做还方便点,这留白的可就是.....

板凳

123456789
456789123
789123456
234567891
567891234
891234567
345678912
678912345
912345678

3 楼

唉,烦死了烦死了,做男人真烦,一点信心都没有。

declare function sames$ (x1$, x2$, x3$, x4$)
declare function instchr% (y1$, y2$)
defint a-z
dim b$(2, 9), a$(2), l(81)

a$(0)="         8  5723  7 21 6 4 1   4  89  9 5 4  43  8   1 2 3 57 4  1764  8   8     "
a$(1)=a$(0)
a$(2)=a$(0)
for i=1 to 81
    i1=((i-1)mod 9)*9+(i-1)\9+1
    i2=(((i-1)\27)*3+((i-1)mod 9)\3)*9+((i-1)\9 mod 3)*3+(i-1)mod 3+1
    i0$ = mid$(a$(0), i, 1)
    mid$(a$(1), i1, 1) = i0$
    mid$(a$(2), i2, 1) = i0$
    if i0$ = chr$(32) then
       l(0) = l(0) + 1
       l(l(0)) = i
    end if
next

for i = 1 to 9
for j = 1 to 9
for k = 0 to 2
if instr(mid$(a$(k),i*9-8,9),chr$(48+j))=0 then b$(k,i)=b$(k,i)+chr$(48+j)
next k, j, i

c$ = space$(l(0))
for j = 1 to l(0)
    i = l(j)
    i0 = (i - 1) \ 9 + 1
    i1 = (i - 1) mod 9 + 1
    i2 = ((i - 1) \ 27) * 3 + ((i - 1) mod 9) \ 3 + 1
    mid$(c$,j,1)=sames$(b$(0, i0), b$(1, i1), b$(2, i2), mid$(c$, j, 1))
    if mid$(c$, j, 1) = chr$(32) then j = j - 2
next

cls
k = 0
for i = 1 to 81
    d$ = mid$(a$(0), i, 1)
    if d$ = chr$(32) then
       k = k + 1
       color 14, 0
       print mid$(c$, k, 1); chr$(32);
    else
       color 7, 0
       print d$; chr$(32);
    end if
    if i mod 9 = 0 then print
next
end

function instchr (y1$, y2$)
   for i = 1 to len(y1$)
       if y2$ < mid$(y1$, i, 1) then exit for
   next
       y1$ = left$(y1$, i - 1) + y2$ + mid$(y1$, i)
   instchr = i
end function

function sames$ (x1$, x2$, x3$, x4$)
sames$ = chr$(32)
if x4$ <> chr$(32) then
   i = instchr(x3$, x4$)
   i = instchr(x2$, x4$)
   i = instchr(x1$, x4$)
end if
for j1 = i + 1 to len(x1$)
    k$ = mid$(x1$, j1, 1)
    j2 = instr(x2$, k$)
    j3 = instr(x3$, k$)
    if j2 > 0 and j3 > 0 then
       x1$ = left$(x1$, j1 - 1) + mid$(x1$, j1 + 1)
       x2$ = left$(x2$, j2 - 1) + mid$(x2$, j2 + 1)
       x3$ = left$(x3$, j3 - 1) + mid$(x3$, j3 + 1)
       sames$ = k$
       exit for
    end if
next
end function

4 楼

我这一张贴居然没拿到一分?顶到评分为止。

5 楼


眼中没有别人;
心里只有自己;

6 楼

如果说的不是我,那是我多情了,
如果说的真是我,那请你来做做.

7 楼


九宫可以剃归;
可以用根|节点|终节点表示;
从根开始,沿节点搜索,遇目标返回;
再次搜索,遇目标返回;
直到搜索到终结点为止;
棋盘通常是用二维数组表示;
dim qiba(1 to 8,1 to 8)
这样表示效率很低;
dim qiba(1 to 64)
效率提高一点;
不过算起来费时;
dim qiba(1 to 90)
这样可以利用树的方式;

8 楼

w1212q,好算法!

9 楼

嗯,好算法,高明.高超,利害,佩服,汗颜,自愧不如.

10 楼

呵呵  说到moz 的 什么什么上了~~~
数据结构。...... 我考试是过了,但是见了类似的题目第一反应还是穷举~~~~
穷举~穷举~穷举~穷举~穷举~穷举~  好东西啊,以前小时候 连高数都不知道的时候就靠他了[em4][em4]

我来回复

您尚未登录,请登录后再回复。点此登录或注册