当前位置: 首页 > news >正文

java nn方格 绕过障碍物_【Java数据结构马踏棋盘问题】将马随机放在国际象棋的8×8棋盘Board[8][8]的某个方格中...

展开全部

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.List;

import java.util.Random;

import java.util.Stack;

public class T {

private static final int[][] MOVES = new int[][] { { -2, 1 }, { -1, 2 },

{ 1, 2 }, { 2, 1 }, { 2, -1 }, { 1, -2 }, { -1, -2 }, { -2, -1 } };

private static final int SIZE = 8;

private static final int BASE = SIZE + 4;

private static int[][] board;

private static NeighborComparator neighborComparator = new NeighborComparator();

public static void main(String[] args) {

board = new int[BASE][BASE];

for (int r = 0; r 

for (int c = 0; c 

if (r  BASE - 3 || c  BASE - 3) {

board[r][c] = -1;

}

}

}

int row = 2 + new Random().nextInt(SIZE);

int col = 2 + new Random().nextInt(SIZE);

solve(row, col);

}

private static void solve(int r, int c) {

Stack stack = new Stack();

int count = 1;

Cell cell = new Cell(r, c, neighbors(r, c));

stack.push(cell);

board[r][c] = count++;

while (!stack.isEmpty()) {

if (stack.size() == SIZE * SIZE) {

break;

}

cell = stack.peek();

if (cell.nextNeighbor 

int[] neighbor = cell.neighbors.get(cell.nextNeighbor);

r = neighbor[0];

c = neighbor[1];

board[r][c] = count++;

stack.push(new Cell(r, c, neighbors(r, c)));

cell.nextNeighbor++;

} else {

stack.pop();

board[cell.r][cell.c] = 0;

count--;

}

}

if (stack.size() == SIZE * SIZE) {

print();

} else {

System.out.println("无解");

}

}

private static class NeighborComparator implements Comparator {

public int compare(int[] a, int[] b) {

return a[2] - b[2];

}

}

private static List neighbors(int r, int c) {

List neighbors = new ArrayList<>();

for (int[] m : MOVES) {

int x = m[0];

int y = m[1];

if (board[r + y][c + x] == 0) {

neighbors.add(new int[] { r + y, c + x, countNeighbors(r + y, c + x) });

}

}

Collections.sort(neighbors, neighborComparator);

return neighbors;

}

private static int countNeighbors(int r, int c) {

int num = 0;

for (int[] m : MOVES) {

if (board[r + m[1]][c + m[0]] == 0) {

num++;

}

}

return num;

}

private static void print() {

for (int i = 2; i 

for (int j = 2; j 

System.out.printf("%2d ", board[i][j]);

}

System.out.println();

}

System.out.println();

}

private static class Cell {

int r;

int c;

List neighbors;

int nextNeighbor = 0;

public Cell(int r, int c, List neighbors) {

this.r = r;

this.c = c;

this.neighbors = neighbors;

}

}

}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • java文件编译成jar包_多个java文件编译并打成jar包经典方法
  • 磁盘碎片整理原理
  • 如何清除保存在 Windows Mobile 上的 Outlook Web Access 访问密码
  • consul java_第二十章 springboot + consul(1)
  • 在WINCE上实现UDP通信(100%可行!)
  • java中有地址吗_java web开发中各类地址的写法
  • Steve Lasker 在 Tech Ed Barcelona 2007 上的 SQL Server Compact 课程
  • java实现插入排序_数据结构与算法—插入排序(Java实现)
  • 解决RichEdit line insertion error的方法
  • 与普元李健民的串吧聚会
  • 北京 Java软件工程师薪资_【北京京东工资】java高级软件工程师待遇-看准网
  • 秋天的植物园
  • maven改java文件自动部署_Runoob-Java-Maven:Maven 自动化部署
  • XPe开发初体验(一)XPe概述
  • mysql 选text blob_MySQL使用TEXT/BLOB类型的知识点详解
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 【css3】浏览器内核及其兼容性
  • 【技术性】Search知识
  • 2017年终总结、随想
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • C++入门教程(10):for 语句
  • Date型的使用
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • java中具有继承关系的类及其对象初始化顺序
  • Just for fun——迅速写完快速排序
  • Mac转Windows的拯救指南
  • mysql中InnoDB引擎中页的概念
  • PhantomJS 安装
  • 关于List、List?、ListObject的区别
  • 京东美团研发面经
  • 利用jquery编写加法运算验证码
  • 两列自适应布局方案整理
  • 聊聊flink的BlobWriter
  • 收藏好这篇,别再只说“数据劫持”了
  • 再次简单明了总结flex布局,一看就懂...
  • 找一份好的前端工作,起点很重要
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • Android开发者必备:推荐一款助力开发的开源APP
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​Java基础复习笔记 第16章:网络编程
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • # Maven错误Error executing Maven
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (12)目标检测_SSD基于pytorch搭建代码
  • (20050108)又读《平凡的世界》
  • (2022 CVPR) Unbiased Teacher v2
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (STM32笔记)九、RCC时钟树与时钟 第二部分
  • (第30天)二叉树阶段总结
  • (二)windows配置JDK环境