JAVA马的遍历

题目描述

在5*4的棋盘中,马只能走斜“日”字。马从位置(x, y)处出发,把棋盘的每一格都走一次,且只走一次,请找出所有路径。

输入

x,y,表示马的初始位置。

输出

将每一格都走一次的路径总数,如果不存在该路径则输出“No solution!”。

样例输入 Copy

1 1
2 2

样例输出 Copy

32
No solution!

package book;

import java.util.Scanner;


public class Horse2{
	static int[][] move = {{2,1},{2,-1},{1,2},{1,-2},{-1,-2},{-1,2},{-2,1},{-2,-1}};
	static int vis[][]=new int[6][5];
	static int dep=0,count=0;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()){
		int x=sc.nextInt();
		int y=sc.nextInt();
		vis[x][y]=1;
		solve(x,y,2);
		if(count==0) {
			System.out.println("No solution!");
		}
		else 
			{
			System.out.println(count);count=0;dep=1;}
		}
	}
	private static void solve(int x, int y, int dep) {
		// TODO Auto-generated method stub
		
		for (int i = 0; i<=7; i++) {
			int nx=x+move[i][0];
			int ny=y+move[i][1];
			if(check(nx,ny)){
				vis[nx][ny]=dep;
				if(dep==20){
					count++;
				}else
					solve(nx,ny,dep+1);
				    vis[nx][ny]=0;
			}
		}
	}
	private static boolean check(int xx, int yy) {

	 return xx>=1&&xx<=5&&yy>=1&&yy<=4&&vis[xx][yy]==0;
	}

}
原文地址:https://www.cnblogs.com/hzcya1995/p/13309592.html