[创新杯] 七个黑白棋子 跳棋问题 ,怀念实验室里和老师摆弄棋子的校园生活.

来源:互联网 发布:hp128fn网络打印设置 编辑:程序博客网 时间:2024/05/02 02:06


public class T42 {

    //用一位数组存储棋盘状态,棋盘左边界LEFT,右边界RIGHT,棋盘中间 位置MID
    //棋盘中各有黑子和白字 COUNT个
    static final int LEFT=0,RIGHT=6,MID=(LEFT+RIGHT)/2;
    static final int COUNT=3;
    static int[] s={1,1,1,2,0,0,0};
    static String[] name={"白","黑","   "};
   
    //输出棋盘状态
    public static void out(int[] s)
    {
        for(int i=0;i<s.length ;i++)
            System.out.print(name[s[i]]);
        System.out.println();
    }
   
   
    public static void main(String[] args)
    {
        int temp;       
      out(s);
      for(int i=MID-1;i>=0;i--)
      {
          int position=i;
          //i位置黑子移动到所有白子右边
          for(int j=0;j<COUNT;j++)
          {
             
              //position位置黑子与position+1位置空格换位
              temp=s[position];s[position]=s[position+1];s[position+1]=temp;
              out(s);
              //position位置空格与position+2位置白字换位
              temp=s[position];s[position]=s[position+2];s[position+2]=temp;
              out(s);
              position++;             
          }
        //i位置黑子移动到其目标位置
         temp=s[position];s[position]=s[position+1];s[position+1]=temp;
          out(s);
          //如果是最后一个黑子,白子不需要回退
          if(i==0) break;
         //count个白子退回到右端
          for(int j=0;j<COUNT;j++)
          {
              temp=s[position];s[position]=s[position-1];s[position-1]=temp;
              out(s);
              position--;
          }
       }
     
     }
   
}