A B C
D E
为了表示方便,我们把6个格子中字母配置用一个串表示出来,比如上边的两种局面分别表示为:
AB*DEC
ABCD*E
题目的要求是:请编写程序,由用户输入若干表示局面的串,程序通过计算,
输出是否能通过对初始状态经过若干次移动到达该状态。可以实现输出1,否则输出0。 初始状态为:ABCDE*
用户输入的格式是:先是一个整数n,表示接下来有n行状态。程序输出也应该是n行1或0
例如,用户输入:
3
ABCDE*
AB*DEC
CAED*B
则程序应该输出:
1
1
0
资源约定:
峰值内存消耗 < 256M
CPU消耗 < 1000ms
java真是容易错:交换自己写,不要写一个swap static函数来交换,因为没啥用
想在一个static函数里改变一个数但不返回值这种,一定要用全局变量,要不然错都不知道哪错的
Map不赋初值就是null
代码:
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
static char a[][]={{'A','B','C'},{'D','E','*'}};
static int dirx[]={0,0,1,-1};
static int diry[]={1,-1,0,0};
static Map<String, Integer> map=new HashMap<String, Integer>();
public static void dfs(int x,int y){
String s="";
for(int i=0;i<2;i++){
for(int j=0;j<3;j++)
s+=a[i][j];
}
if(map.get(s)!=null) return;
map.put(s, 1);
for(int i=0;i<4;i++){
int xx=x+dirx[i];
int yy=y+diry[i];
if(xx<0||xx>=2||yy<0||yy>=3) continue;
char t1=a[x][y];
a[x][y]=a[xx][yy];
a[xx][yy]=t1;
dfs(xx,yy);
char t2=a[x][y];
a[x][y]=a[xx][yy];
a[xx][yy]=t2;
}
}
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
dfs(1,2);
int n=scan.nextInt();
while(n--!=0){
String s=scan.next();
if(map.get(s)!=null){
System.out.println("1");
}
else{
System.out.println("0");
}
}
}
}