算法设计与分析: 5-14 独立钻石跳棋问题

5-14 独立钻石跳棋问题


问题描述

独立钻石跳棋的棋盘上有 33 个方格,每个方格中可放 1 枚棋子。棋盘中最多可摆放 32枚棋子。下棋的规则是任一棋子可以沿水平或垂直方向跳过与其相邻的棋子进入空着的方格 并吃掉被跳过的棋子。试设计一个算法,对于任意给定的棋盘布局,找出一种下棋方法,使得最终棋盘上只剩下一个棋子。

独立钻石跳棋棋盘

对于给定的独立钻石跳棋的棋盘初始布局,和棋盘上最终剩下的棋子所在的位置(x,y), 编程计算一种遵循下棋的规则下棋方法,使最终棋盘上仅在位置(x,y)处有一枚棋子。当 (x,y)=(0,0)时,表示不指定棋子的最终位置。棋子位置的坐标定义如下。

独立钻石跳棋棋盘坐标

数据输入:
第一行中有 1 个正整数 n,表示棋盘的初始布局 中有 n 个棋子。第 2 行起每行 2 个数,分别是 n 个棋子的位置。最后 1 行是棋盘上最终剩下的棋子所在的位置。

结果输出:
每行有 2 对方格 坐标(a,b)和(c,d),表示从方格(a,b)跳到方格(c,d)。问题无解时输出“No”solution!。


Java

package Chapter5HuiSuFa;

import java.util.Scanner;

public class DuLiZuanShiTiaoQi {
   

    //Move: 棋子走步
    //(sx,xy):起步坐标 (xv,yv):走步方向
    private static class Move{
   
        int sx;
        int sy;
        int xv;
        int yv;
    }

    private static int MAX = 100000;
    private static int SIZE = 7;
    private static int num;
    private static int endx,endy;
    private static int[][] board = new int[SIZE][SIZE];//board[7][7]表示棋盘;board[x][y]:0->空方格 1->棋子占用方格 2->棋盘外方格

    private static Move[] moves = new Move[MAX];
    private static Move[] ans = new Move[MAX];
    private static int count;

    private static long[][] gmoves;
    private static long gboard;


    public static void main(String[] args){
        Scanner input = new Scanner(System.in);

        while (true){
            count = 0;

            int x,y;
            init();

            num = input.nextInt();
         
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值