谜题(JAVA语言)

package 第三章习题;
/*
 * 有一个5*5的网络,其中恰好有一个格子是空的,其他格子各有一个字母。
 * 一个有4种指令:A, B, L, R, 分别表示把空格上、下、左、右的相邻字母移到空格中。
 * 输入初始网格和指令序列(以数字0结束),输出指令执行完毕后的网络。
 * 如果有非法指令,应输出" This puzzle has no final configuration."。


执行ARRBBL0前
T R G S J
X D O K I
M V L N
W P A B E
U Q H C F
执行ARRBBL0后
T R G S J
X O K L I
M D V B N
M P A E
U O H C F
             解法:输入初始网格和指令序列,初始网格用二维数组表示,分别按照指令顺序进行将字母移到空格,遇到0就结束。
 */
import java.util.*;
public class 谜题 {


public static void main(String[] args) {
// TODO Auto-generated method stub
char a[][]=new char[5][5];
Scanner in=new Scanner(System.in);
String s1=in.next();
String s2=in.next();
String s=s1+" "+s2;

int k=0;
int iNull=0;
int jNull = 0;
for(int i=0;i<5;i++) {
for(int j=0;j<5;j++) {

a[i][j]=s.charAt(k++);
if(a[i][j]==' ') {
iNull=i;
jNull=j;
}
}
}
String n=in.next();
int t=0;
while(t<n.length()&&n.charAt(t)!=0)
{
switch(n.charAt(t)) 
{
//上 above 

case 'A':
if(iNull-1>=0)
a[iNull][jNull]=a[iNull-1][jNull];a[--iNull][jNull]=' ';break;
//below
case 'B':
if(iNull+1<a.length)
a[iNull][jNull]=a[iNull+1][jNull];a[++iNull][jNull]=' ';break;
//left
case 'L':
if(jNull-1>=0)
a[iNull][jNull]=a[iNull][jNull-1];a[iNull][--jNull]=' ';break;
//right
case 'R':
if(jNull+1<a[iNull].length)
a[iNull][jNull]=a[iNull][jNull+1];a[iNull][++jNull]=' ';break;
}
t++;
}
for(int i=0;i<5;i++) {
for(int j=0;j<5;j++) {
System.out.print(a[i][j]);
}
System.out.println();
}
}


}

猜你喜欢

转载自blog.csdn.net/liuyaoyun/article/details/79342244