回 帖 发 新 帖 刷新版面

主题:跳棋难题

输入n(n<=10),在n*2+1个点上,放n个白球,n个黑球,例:
 n=3
 W W W 空 b b b
w(白),b(黑)
现在每个球可以向旁边走一个,或跳过一个异色球,求最少的移动次数和方法,用QB
怎么办啊,急!!!!!!!!!!!!!!!!!

回复列表 (共1个回复)

沙发

CLS
INPUT N
DIM A$(-1 TO N * 2 + 3), X(500), Y(500), W$(500)
PRINT "    "; STRING$(N, "A") + " " + STRING$(N, "B")
Y$ = STRING$(N, "B") + " " + STRING$(N, "A")
FOR I = 1 TO N: A$(I) = "A": A$(N + 1 + I) = "B": NEXT I: A$(N + 1) = " "
I = 0: P = 1: X(P) = N + 1
DO
I = I + 1: X = N * 2 + 2
IF I = 1 AND A$(X(P) - 1) = "A" THEN X = X(P) - 1
IF I = 2 AND A$(X(P) + 1) = "B" THEN X = X(P) + 1
IF I = 3 AND A$(X(P) - 1) = "B" AND A$(X(P) - 2) = "A" THEN X = X(P) - 2
IF I = 4 AND A$(X(P) + 1) = "A" AND A$(X(P) + 2) = "B" THEN X = X(P) + 2
IF I <= 4 THEN
IF X >= 1 AND X <= N * 2 + 1 THEN
SWAP A$(X), A$(X(P)): P = P + 1: X(P) = X: Y(P) = I: I = 0
X$ = ""
FOR J = 1 TO N * 2 + 1: X$ = X$ + A$(J): NEXT J
W$(P) = X$
IF X$ = Y$ THEN
FOR J = 2 TO P: PRINT USING "###"; J - 1;
PRINT ":"; W$(J): NEXT J: END
END IF
END IF
ELSE I = Y(P): P = P - 1: SWAP A$(X(P + 1)), A$(X(P))
END IF
LOOP
END

我来回复

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