棋子换位

棋子换位

有n个棋子A,n个棋子B,在棋盘上排成一行。
它们中间隔着一个空位,用“.”表示,比如: AAA.BBB 现在需要所有的A棋子和B棋子交换位置。
移动棋子的规则是:
1. A棋子只能往右边移动,B棋子只能往左边移动。
2. 每个棋子可以移动到相邻的空位。
3. 每个棋子可以跳过相异的一个棋子落入空位(A跳过B或者B跳过A)。 AAA.BBB 可以走法:
移动A ==> AA.ABBB
移动B ==> AAAB.BB 跳走的例子:
AA.ABBB ==> AABA.BB 以下的程序完成了AB换位的功能,请仔细阅读分析源码,填写划线部分缺失的内容。 public class Main
{
static void move(char[] data, int from, int to)
{
data[to] = data[from];
data[from] = '.';
} static boolean valid(char[] data, int k)
{
if(k<0 || k>=data.length) return false;
return true;
} static void f(char[] data)
{
while(true){
boolean tag = false;
for(int i=0; i<data.length; i++){
int dd = 0; // 移动方向
if(data[i]=='.') continue;
if(data[i]=='A') dd = 1;
if(data[i]=='B') dd = -1; if(valid(data, i+dd) && valid(data,i+dd+dd)
&& data[i+dd]!=data[i] && data[i+dd+dd]=='.'){
// 如果能跳...
move(data, i, i+dd+dd);
System.out.println(new String(data));
tag = true;
break;
}
} if(tag) continue; for(int i=0; i<data.length; i++){
int dd = 0; // `移动方向
if(data[i]=='.') continue;
if(data[i]=='A') dd = 1;
if(data[i]=='B') dd = -1; if(valid(data, i+dd) && data[i+dd]=='.'){
// 如果能移动...
if( _____________________ ) continue; //填空位置
move(data, i, i+dd);
System.out.println(new String(data));
tag = true;
break;
}
} if(tag==false) break;
}
} public static void main(String[] args)
{
char[] data = "AAA.BBB".toCharArray();
f(data);
}
} 注意:只提交划线部分缺少的代码,不要复制已有代码或填写任何多余内容。 答案:valid(data,i+dd+dd) && valid(data, i-dd) && data[i-dd] == data[i+dd+dd]

最新文章

  1. 用多itemtype的具有addHeaderView的recyclerview,还是scrollview?
  2. (medium)LeetCode .Implement Trie (Prefix Tree)
  3. [RxJS] Transformation operator: map and mapTo
  4. 采用openFileOutput获取输出流
  5. 17232 伪Acmer的推理(传递闭包)
  6. Python多进程并发(multiprocessing)用法实例详解
  7. Hadoop中MapReduce作业流程图
  8. java非阻塞IO(NIO)流程
  9. Linux常用目录结构
  10. 第二课丶pygame
  11. google搜索引擎使用
  12. UVA 815 Flooded!
  13. String.split()与StringUtils.split()
  14. ssm中的某些异常
  15. nginx init 官方启动脚本
  16. hadoop-2.6.0.tar.gz的集群搭建(3节点)(不含zookeeper集群安装)
  17. iBase4j前端01_bootstrap-suggest json-server模拟后台数据、bootstrap-suggest环境搭建、开启bootstrap-suggest的post和put请求
  18. php接口数据加密、解密、验证签名【转】
  19. attempt to dereference a generic a pointer(转)
  20. java中split任意数量的空白字符

热门文章

  1. python 基础知识6-文件操作
  2. AndroidStudio3.6升级后的坑-apk打包
  3. centos下mysql 看不到mysql数据库(密码无法更改)
  4. SpringMvc 你该知道如何在HandlerExceptionResolver中获取Model
  5. docker+headless+robotframework+jenkins实现web自动化持续集成
  6. Django项目文件
  7. docker基本维护命令
  8. 还不会K8S吗?先从kubeadm开始吧
  9. Maven——pom.xml文件报错:Missing artifact:jar包
  10. Collection接口和list,set子类