java實現(xiàn)馬踏棋盤游戲
更新時間:2022年02月14日 11:38:32 作者:會釣貓的魚
這篇文章主要為大家詳細介紹了java實現(xiàn)馬踏棋盤游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
用java實現(xiàn)馬踏棋盤游戲算法,供大家參考,具體內(nèi)容如下
在4399小游戲中有這樣一個游戲
這是代碼實現(xiàn)
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; ? ? ? ? } ? ? } ? ? //判斷當(dāng)前棋子下一個可以走的所有位置數(shù)組 ? ? 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; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? }); ? ? } }
然后照著步驟一步一步下就可以了
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Matplotlib可視化之自定義顏色繪制精美統(tǒng)計圖
matplotlib提供的所有繪圖都帶有默認樣式.雖然這可以進行快速繪圖,但有時可能需要自定義繪圖的顏色和樣式,以對繪制更加精美、符合審美要求的圖像.matplotlib的設(shè)計考慮到了此需求靈活性,很容易調(diào)整matplotlib圖形的樣式,需要的朋友可以參考下2021-06-06郵件收發(fā)原理你了解嗎? 郵件發(fā)送基本過程與概念詳解(一)
你真的了解郵件收發(fā)原理嗎?這篇文章主要為大家詳細介紹了郵件發(fā)送基本過程與概念,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10Java算法實現(xiàn)調(diào)整數(shù)組順序使奇數(shù)位于偶數(shù)之前的講解
今天小編就為大家分享一篇關(guān)于Java算法實現(xiàn)調(diào)整數(shù)組順序使奇數(shù)位于偶數(shù)之前的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-01-01