优化马踏棋盘java代码 优化马踏棋盘java代码是多少
帮帮忙编程马踏棋盘(十万火急)
#include stdio.h
成都创新互联专注为客户提供全方位的互联网综合服务,包含不限于网站设计、成都网站建设、西宁网络推广、重庆小程序开发、西宁网络营销、西宁企业策划、西宁品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联为所有大学生创业者提供西宁建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com
main()
{
int a[9][9],object[9][9],step[9][3]={{0,0,0},{1,1,2},{2,1,-2},{3,-1,2},{4,-1,-2},
{5,2,1},{6,2,-1},{7,-2,1},{8,-2,-1}};
int i,j,k,x,y,z,m,n,min;
for(i=1;i=8;i++)
for(j=1;j=8;j++)
a[i][j]=0; /* clear data in array */
for(i=1;i=8;i++)
for(j=1;j=8;j++)
for(k=1;k=8;k++)
{
x=i;y=j;
x=x+step[k][1];
y=y+step[k][2];
if(x=1x=8y=1y=8)
a[i][j]++ ; /* initilize array */
} /* start col and row;*/
printf("Please inpute start position x,y\n");
scanf("%d,%d",m,n);
for(z=1;z=64;z++)
{
min =10;
object[m][n]=z;
a[m][n]=0;
for(k=1;k=8;k++)
{
x=m+step[k][1];
y=n+step[k][2];
if(x=1x=8y=1y=8)
if(a[x][y]!=0)
{
--a[x][y];
if(a[x][y]min)
{
min=a[x][y];
i=x;
j=y;
}
}
}
m=i;n=j;
}
for(i=1;i=8;i++)
{
for(j=1;j=8;j++)
printf("%6d",object[i][j]);
printf("\n");
}
}
【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 BASE; r++) {
for (int c = 0; c BASE; c++) {
if (r 2 || r BASE - 3 || c 2 || 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) {
StackCell stack = new StackCell();
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 cell.neighbors.size()) {
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 Comparatorint[] {
public int compare(int[] a, int[] b) {
return a[2] - b[2];
}
}
private static Listint[] neighbors(int r, int c) {
Listint[] 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 board.length - 2; i++) {
for (int j = 2; j board[i].length - 2; j++) {
System.out.printf("%2d ", board[i][j]);
}
System.out.println();
}
System.out.println();
}
private static class Cell {
int r;
int c;
Listint[] neighbors;
int nextNeighbor = 0;
public Cell(int r, int c, Listint[] neighbors) {
this.r = r;
this.c = c;
this.neighbors = neighbors;
}
}
}
java马踏棋盘设计目的
java马踏棋盘设计目的是解决实际的应用问题,特别是非数值计算类型的应用问题。
马踏棋盘的基本过程:国际象棋的棋盘为8*8的方格棋盘。现将"马"放在任意指定的方格中,按照"马"走棋的规则将"马"进行移动。要求每个方格只能进入一次,最终使得"马"走遍棋盘的64个方格。
马踏棋盘的解决方案:基于深度优先搜索的方法是比较常用的算法,深度优先搜索算法也是数据结构中的经典算法之一,主要是采用递归的思想,一级一级的寻找,最后找到合适的解。
文章名称:优化马踏棋盘java代码 优化马踏棋盘java代码是多少
路径分享:http://scyanting.com/article/hgecps.html