Java实现网格中移动字母
JAVA 实现 移动 字母 网格
2023-09-14 08:58:12 时间
2x3=6个方格中放入ABCDE五个字母,右下角的那个格空着。如图【1.jpg】所示。
和空格子相邻的格子中的字母可以移动到空格中,比如,图中的C和E就可以移动,移动后的局面分别是:
A B
D E C
A B C
D E
为了表示方便,我们把6个格子中字母配置用一个串表示出来,比如上边的两种局面分别表示为:
ABDEC
ABCDE
题目的要求是:请编写程序,由用户输入若干表示局面的串,程序通过计算,输出是否能通过对初始状态经过若干次移动到达该状态。可以实现输出1,否则输出0。初始状态为:ABCDE*
用户输入的格式是:先是一个整数n,表示接下来有n行状态。程序输出也应该是n行1或0
例如,用户输入:
3
ABCDE*
ABDEC
CAEDB
则程序应该输出:
1
1
0
注意:
请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!
在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。
import java.util.HashSet;
import java.util.Scanner;
public class Main {
public static int[][] move = {{-1,0}, {1,0}, {0,1}, {0,-1}};
public static HashSet<String> set = new HashSet<String>();
public String swap(String A, int i, int j) {
char[] arrayA = A.toCharArray();
char temp = arrayA[i];
arrayA[i] = arrayA[j];
arrayA[j] = temp;
StringBuffer s = new StringBuffer("");
for(int k = 0;k < arrayA.length;k++)
s.append(arrayA[k]);
return s.toString();
}
public void dfs(String A, int startX, int startY) {
for(int i = 0;i < 4;i++) {
int x = startX + move[i][0];
int y = startY + move[i][1];
if(x >= 0 && x < 2 && y >= 0 && y < 3) {
String S = swap(A, startX * 3 + startY, x * 3 + y);
if(!set.contains(S)) {
set.add(S);
dfs(S, x, y);
}
}
}
}
public static void main(String[] args) {
Main test = new Main();
String A = "ABCDE*";
set.add(A);
test.dfs(A, 1, 2);
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] result = new int[n];
for(int i = 0;i < n;i++) {
String t = in.next();
if(set.contains(t))
result[i] = 1;
}
for(int i = 0;i < n;i++)
System.out.println(result[i]);
}
}
相关文章
- java map 二维数组_Java二维数组实现简单Map
- java 实现 按位异或_Java 按位异或的性质及其妙用
- java详细安装教程一一java(jdk)安装[通俗易懂]
- java 阶乘算法_Java 实现阶乘算法
- java生成license_使用truelicense实现用于JAVA工程license机制(包括license生成和验证)…
- 一个经典例子让你彻彻底底理解java回调机制是什么_java实现回调函数
- java实现文件转换成二进制存储与取出详解编程语言
- MySQL封装之Java实现(mysql封装java)
- MySQL连接Java:一步一步实现连接(mysql连接java)
- 系统命令Java实现Linux系统命令调用的探究(java调用linux)
- Java 连接 Redis:实现数据快速传输(java连redis)
- 策略Java实现Redis过期策略(redisjava过期)
- 策略Java使用Redis实现过期策略(redisjava过期)
- 清理基于Redis与Java实现数据过期清除(redisjava过期)
- 检查Redis与Java实现的过期检查(redisjava过期)
- Java文件在Linux系统中的使用(java文件linux)
- 实现Java实现的Redis封装类:强化Redis技术支持(redis封装类java)
- Java调用Linux库实现跨系统功能(java调用linux库)
- 程序Oracle调用Java程序的实现方法(oracle调用java)
- Java操作Redis实现数据快速存取(java访问redis)
- 实现高并发:Java利用Redis秒杀成功(java秒杀redis)
- Java编程实现MySQL数据库连接(java连mysql数据库)
- Oracle收购了Java一个伟大的转折点(java被oracle吗)
- java实现顺序结构线性列表的函数代码
- 第三方包jintellitype实现Java设置全局热键