JAVA 말의 편력

1366 단어 Algorithm
제목 설명
5*4 의 바둑판 에서 말 은'일'자 를 기울 일 수 밖 에 없다.말 은 위치(x,y)에서 출발 하여 바둑판 의 모든 칸 을 한 번 씩 걷 고 한 번 만 걷 습 니 다.모든 경 로 를 찾 아 보 세 요.
입력
x,y,말의 초기 위 치 를 나타 낸다.
출력
모든 칸 을 한 번 씩 가 는 경로 의 총 수 를 이 경로 가 존재 하지 않 으 면'No solution!'을 출력 합 니 다.
샘플 입력 복사
1 1 2 2
샘플 출력 복사
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;
	}

}

좋은 웹페이지 즐겨찾기