题目描述:点击打开链接
/*
思路:简单的填充数组,查找空格,然后判断移动便可。
*/
import java.util.Scanner;
public class Main
{
public static void swap(char arr[][],int x1,int y1,int x2,int y2)
{
char ch=arr[x1][y1];
arr[x1][y1]=arr[x2][y2];
arr[x2][y2]=ch;
}
public static void main(String[] args)
{
Scanner cin = new Scanner(System.in);
final int N = 5;
char [][]arr=new char[N][N];
int Case=1;
while(true)
{
for(int i=0;i<N;++i)
{
arr[i]=cin.nextLine().toCharArray();
if(arr[0][0]=='Z')return;
}
String t="";
while(t.indexOf('0')==-1)
t+=cin.nextLine();
char []str=t.toCharArray();
int indexa=0,indexb=0;
for(int i=0;i<N;++i)
for(int j=0;j<N;++j)
if(arr[i][j]==' ')
{
indexa=i;
indexb=j;
}
boolean flag=false;
OUT:for(char ch : str)
switch(ch)
{
case 'A':
if(indexa-1<0)
{
flag=true;
break OUT;
}
swap(arr,indexa,indexb,indexa-1,indexb);
--indexa;
break;
case 'R':
if(indexb+1>N-1)
{
flag=true;
break OUT;
}
swap(arr,indexa,indexb,indexa,indexb+1);
++indexb;
break;
case 'B':
if(indexa+1>N-1)
{
flag=true;
break OUT;
}
swap(arr,indexa,indexb,indexa+1,indexb);
++indexa;
break;
case 'L':
if(indexb-1<0)
{
flag=true;
break OUT;
}
swap(arr,indexa,indexb,indexa,indexb-1);
--indexb;
break;
}
if(Case>1)System.out.println();
System.out.println("Puzzle #"+(Case++)+":");
if(flag)
System.out.println("This puzzle has no final configuration.");
else
for(int i=0;i<N;++i)
{
for(int j=0;j<N-1;++j)
System.out.print(arr[i][j]+" ");
System.out.println(arr[i][N-1]);
}
}
}
}