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");
}
}
}
}