#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");
}
}
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馬踏棋盤設計目的是解決實際的應用問題,特別是非數值計算類型的應用問題。
馬踏棋盤的基本過程:國際象棋的棋盤為8*8的方格棋盤。現將"馬"放在任意指定的方格中,按照"馬"走棋的規則將"馬"進行移動。要求每個方格只能進入一次,最終使得"馬"走遍棋盤的64個方格。
馬踏棋盤的解決方案:基于深度優先搜索的方法是比較常用的算法,深度優先搜索算法也是數據結構中的經典算法之一,主要是采用遞歸的思想,一級一級的尋找,最后找到合適的解。