您的位置:首页 > 其它

POJ 2488 A Knight's Journey

2015-06-26 17:31 225 查看
//简单的对8种状态的搜索

//做好标记 可以说是回溯的吧

import java.util.*;

public class Main{

static Scanner inScanner=new Scanner(System.in);

static int p,q;

static final int N=27;

static int a_x[]=new int[]{-1,1,-2,2,-2,2,-1,1};

static int a_y[]=new int[]{-2,-2,-1,-1,1,1,2,2};

static boolean test;

static boolean[][] biao=new boolean

;

private static class Node{

int x,y;

Node(int x,int y){

this.x=x;

this.y=y;

}

}

static Node[] road=new Node[N*N+1];

static boolean isOver(int x,int y){

if(x>p||x<=0||y>q||y<=0)

return true;

return false;

}

static boolean dfs(int n,int x,int y){

if(n>p*q){

int j;

for(j=1;j<=p*q;j++){

System.out.print((char)(road[j].y+'A'-1)+""+road[j].x);

}

System.out.println();

return true;

}

int i;

for(i=0;i<8;i++){

int tempx,tempy;

tempx=x+a_x[i];

tempy=y+a_y[i];

if(!isOver(tempx, tempy)&&!biao[tempx][tempy]){

biao[tempx][tempy]=true;

road
=new Node(tempx, tempy);

if(dfs(n+1, tempx, tempy))

return true;

biao[tempx][tempy]=false;

}

}

return false;

}

public static void main(String[] args) {

while(inScanner.hasNext()){

int num=inScanner.nextInt();

for(int i=1;i<=num;i++){

p=inScanner.nextInt();

q=inScanner.nextInt();

test=true;

for(int k=0;k<N;k++)

for(int f=0;f<N;f++)

biao[k][f]=false;

System.out.println("Scenario #"+i+":");

biao[1][1]=true;

road[1]=new Node(1, 1);

if(!dfs(2, 1, 1))

System.out.println("impossible");

System.out.println();

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: