黑白翻转棋算法java实现

翻转游戏是在4*4的正方形里进行的,每个小正方形放有拥有黑白两面的棋子。每一轮你翻转3-5个棋子,把它从白变黑或从黑变白。 翻转的规则如下: 1. 选择任意一个棋子。 2. 翻转选择的棋子和与它相临的前后左右的棋子(如果有的话) 参考如下例子: bwbw wwww bbwb bwwb 其中 b表示黑色在上面,w表示白色在上面。如果选
摘要由CSDN通过智能技术生成

翻转游戏是在4*4的正方形里进行的,每个小正方形放有拥有黑白两面的棋子。每一轮你翻转3-5个棋子,把它从白变黑或从黑变白。
翻转的规则如下: 1. 选择任意一个棋子。 2. 翻转选择的棋子和与它相临的前后左右的棋子(如果有的话)
参考如下例子:
bwbw
wwww
bbwb
bwwb
其中 b表示黑色在上面,w表示白色在上面。如果选择第三行第一个棋子 进行翻转结果如下:
bwbw
bwww
wwwb
wwwb
游戏的目标在于使所有白色或所有黑色朝上,你的任务是计算完成目标所需要的最少步数。
[输入]
输入4行,每行4单词w或b,表示游戏初始格局。 [输出]:
输出完成目标所需最小步数。如果最初格局及达到目 标,输出0; 不能达到目标输出“Impossible”(不用引号)。 [样例]:
Sample Input :
bwwb
bbwb
bwww
Sample Output:
4

实际上我们完全可以只枚举第一行的操作,第一行有(翻,翻,翻,翻)(翻,翻,翻,不翻)。。。(不翻,不翻,不翻,不翻)16种,如果我们想把棋子全部翻成一种颜色的话,那么第二行的操作就是固定的了(因为第一行的 棋子的状态对第二行棋子的翻转进行了约束,如果想把第一行的棋子变成白色,那么第二行中位于第一行黑色棋子下方的位置必须翻转,反之亦然), 那么第三行、第四行的操作显然也是固定的了。

实现代码如下:

/**
 * 
 */
/**
 * @author Administrator
 *
 */

package fanzhuanQi;

import java.util.Scanner;

public class fanzhuan{
   
    static int steps=Integer.MAX_VALUE;
    //(x,y)坐标合起来就是中心点及上下左右坐标啦! 
    static int [] dx={
  
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值