java实现马踏棋盘游戏
短信预约 -IT技能 免费直播动态提醒
用java实现马踏棋盘游戏算法,供大家参考,具体内容如下
在4399小游戏中有这样一个游戏
这是代码实现
package com.HorseChess;
import java.awt.*;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Scanner;
public class HorseChess {
private static int X;
private static int Y;
private static boolean visited[];
private static boolean finished;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入行:");
X = sc.nextInt();
System.out.println("请输入列:");
Y = sc.nextInt();
System.out.println("请输入棋子所在行:");
int row = sc.nextInt();
System.out.println("请输入棋子所在列:");
int column = sc.nextInt();
int [][] chessboard = new int[X][Y];
visited = new boolean[X*Y];
traverchess(chessboard,row-1,column-1,1);
for(int[] rows : chessboard){
for (int step : rows){
System.out.print(step + "\t");
}
System.out.println();
}
}
public static void traverchess(int[][] chessboard,int row,int column,int step){
chessboard[row][column] = step;
visited[row * X+column] = true;
ArrayList<Point> ps = next(new Point(column,row));
sort(ps);
while (!ps.isEmpty()){
Point p = ps.remove(0);
if(!visited[p.y*X+p.x]){
traverchess(chessboard,p.y,p.x,step+1);
}
}
if(step<X*Y&&!finished){
chessboard[row][column] = 0;
visited[row * X + column] = false;
}
else {
finished = true;
}
}
//判断当前棋子下一个可以走的所有位置数组
public static ArrayList<Point> next(Point curpoint){
ArrayList<Point> ps = new ArrayList<Point>();
Point p1 = new Point();
if((p1.x = curpoint.x - 2)>=0&&(p1.y = curpoint.y - 1)>=0){
ps.add(new Point(p1));
}
if((p1.x = curpoint.x - 1)>=0&&(p1.y = curpoint.y - 2)>=0){
ps.add(new Point(p1));
}
if((p1.x = curpoint.x + 1)< X && (p1.y = curpoint.y - 2)>=0){
ps.add(new Point(p1));
}
if((p1.x = curpoint.x + 2)< X && (p1.y = curpoint.y - 1)>=0){
ps.add(new Point(p1));
}
if((p1.x = curpoint.x + 2)<X&&(p1.y = curpoint.y + 1)<Y){
ps.add(new Point(p1));
}
if((p1.x = curpoint.x + 1)<X&&(p1.y = curpoint.y + 2)<Y){
ps.add(new Point(p1));
}
if((p1.x = curpoint.x - 1)>=0&&(p1.y = curpoint.y + 2)<Y){
ps.add(new Point(p1));
}
if((p1.x = curpoint.x - 2)>=0&&(p1.y = curpoint.y + 1)<Y){
ps.add(new Point(p1));
}
return ps;
}
//使用贪心算法提高算法运行速度
public static void sort(ArrayList<Point> ps){
ps.sort(new Comparator<Point>() {
@Override
public int compare(Point o1, Point o2) {
int count1 = next(o1).size();
int count2 = next(o2).size();
if(count1<count2){
return -1;
}else if (count1 == count2){
return 0;
}
else {
return 1;
}
}
});
}
}
然后照着步骤一步一步下就可以了
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341