资源简介

JAVA实现骑士巡游(马踏棋盘) 8X8格 输入起始X轴Y轴坐标

资源截图

代码片段和文件信息

import java.applet.applet;
import java.awt.Graphics;
import java.awt.Color;
import javax.swing.JOptionPane;
import java.awt.Font;


//提供二元型数值
class Pair
{
 private int x;
 private int y;
// Pair()
// {
// }
 Pair(int aint b)
 {
  x=a;
  y=b;
 }
 public int getX()
 {
  return x;
 }
 public int getY()
 {
  return y;
 }
}

//提供巡游结果
class GetKnightCruise
{
 //存储8*8棋盘上各位置为第几步
 private static int[][] arr=new int[8][8];
 //用来存储骑士可以到达的8个位置的偏移量
 private static Pair[] index=new Pair[8];
 //设置index的初始值
 
 int ab;
 private static void setIndex()
 {
  index[0]=new Pair(-21);
  index[1]=new Pair(-12);
  index[2]=new Pair(12);
  index[3]=new Pair(21);
  index[4]=new Pair(2-1);
  index[5]=new Pair(1-2);
  index[6]=new Pair(-1-2);
  index[7]=new Pair(-2-1);
 }
 //设置棋盘位置的处始值
 private static void setArr()
 {
 
  for (int i=0;i<8;i++)
  {
   for (int j=0;j<8;j++)
   {
    arr[i][j]=0;
   }
  }
 
 }
 //计算位置(ij)的出口数
 private static int getExitNum(int iint j)
 {
  int num=0;
  for(int t=0;t<8;t++)
  {
   if(i+index[t].getX()>=0&&i+index[t].getX()<=7&&j+index[t].getY()>=0&&j+index[t].getY()<=7&&arr[i+index[t].getX()][j+index[t].getY()]==0)
   {
    num++;
   }
  }
  return num;
 }
 //选择下一个所走的位置,beginIndex的作用是定位选择优先权的起始位置
 private static Pair getNextPositioin(int iint jint beginIndex)
 {
  int[] temp=new int[8];
  int min=8;
  for(int t=0;t<8;t++)
  {
   if(i+index[t].getX()>=0&&i+index[t].getX()<=7&&j+index[t].getY()>=0&&j+index[t].getY()<=7&&arr[i+index[t].getX()][j+index[t].getY()]==0)
   {
    temp[t]=getExitNum(i+index[t].getX()j+index[t].getY());
    if(temp[t]!=0&&temp[t]    {
     min=temp[t];
    }
   }
  }
  for(int t=0;t<8;t++)
  {
   int h=(t+beginIndex)%8;
   if(temp[h]==min)
   {
    return new Pair(i+index[h].getX()j+index[h].getY());
   }
  }
  return new Pair(-1-1);
 }
 //寻找下一个唯一的出口(主要给最后一步使用,因为getNextPositioin已经不适合了)
 private static Pair getNextPositioinOfTheLastStep(int iint j)
 {
  for(int t=0;t<8;t++)
  {
   if(i+index[t].getX()>=0&&i+index[t].getX()<=7&&j+index[t].getY()>=0&&j+index[t].getY()<=7&&arr[i+index[t].getX()][j+index[t].getY()]==0)
   {
    return new Pair(i+index[t].getX()j+index[t].getY());
   }
  }
  return new Pair(-1-1);
  
 }
 //从(ij)开始骑士巡游
 static int[][] getKnightCruise(int iint j)
 { 
  Pair tt;
  setArr();
  setIndex();
  for(int q=0;q<8;q++)
  {
   int ii=ijj=j;
   int p=0;
   for(p=1;p<=64;p++)
   {
    arr[ii][jj]=p;
    if(p==63)
    {
     tt=getNextPositioinOfTheLastStep(iijj);
     ii=tt.getX();
     jj=tt.getY();
     continue;
    }
    tt=getNextPositioin(iijjp);
    ii=tt.getX();
    jj=tt.getY();
    if(ii==-1||jj==-1)
    {
     break;
    }
   }
   if(p==65)
   {
 // return; 
    return arr;
   }
  }
    return arr;
 }
 //得到巡游数组
 public static int[][] getResult()
 {
 // int i=0j=0;
  int i=1j=1;
  getKnightCruise(ij);
  return

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2134  2009-11-13 15:09  马踏棋盘问题\GetKnightCruise.class

     文件       2068  2009-11-13 15:09  马踏棋盘问题\mataqipanqiujiewenti1.class

     文件       4633  2007-06-30 10:55  马踏棋盘问题\mataqipanqiujiewenti1.java

     文件        115  2007-05-16 22:38  马踏棋盘问题\mataqipanwenti.html

     文件        383  2009-11-13 15:09  马踏棋盘问题\Pair.class

     目录          0  2009-11-13 15:09  马踏棋盘问题

----------- ---------  ---------- -----  ----

                 9333                    6


评论

共有 条评论