棋子的移动问题

题目描述:

有2n个棋子(n>=4)排成一行,白子用0表示,黑子用1表示,例如n=5时初始状态为0 0 0 0 0 1 1 1 1 1 _ _ (右边至少有2个空位),要求通过棋子移动最终成为 _ _0 1 0 1 0 1 0 1 0 1 .

棋子移动规则:
1.每次必须同时移动相邻的两个棋子。
2.颜色不限,移动方向不限。
3.每次移动必须跳过若干棋子。
4.不能调换这两个棋子的位置。

题解:

递归出口为n=4;这时候我们可以求解。
move(a,3,4,8,9);
move(a,7,8,3,4);
move(a,1,2,7,8);
move(a,6,7,1,2);
move(a,0,1,6,7);
即可。a为数组,前面两个数为两相邻小球的初始位置,后面两数为小球要移动的位置。
当n=5时,我们可以move(a,4,5,10,11);move(a,8,9,4,5);这样得到 0 0 0 0 1 1 1 1 _ _ 0 1序列。然而前10项就是n=4的序列。
当为n时,move(a,n-1,n,2n,2n+1);move(a,2n-2,2n-1,n-1,n);
这是前2(n-1)项为n-1时的序列,如此递归求解即可。

代码:

#include<iostream>
using namespace std;
void move(char a[],int m1,int n1,int m2,int n2)
{char temp=a[m1];a[m1]=a[m2];a[m2]=temp;temp=a[n1];a[n1]=a[n2];a[n2]=temp;
}
void chess(char a[],int n)
{if(n==4){move(a,3,4,8,9);move(a,7,8,3,4);move(a,1,2,7,8);move(a,6,7,1,2);move(a,0,1,6,7);}else{move(a,n-1,n,2*n,2*n+1);move(a,2*n-2,2*n-1,n-1,n);chess(a,n-1);}
}
int main()
{int i,n;cin>>n; char a[2*n+2];for(i=0;i<n;i++){a[i]='0';a[n+i]='1';}a[2*n]='_';a[2*n+1]='_';chess(a,n);for(i=0;i<2*n+1;i++){cout<<a[i]<<" ";}cout<<"\n";return 0;} 

棋子的移动问题(递归问题)相关推荐

  1. python 围棋按照坐标查找棋子_深度优先搜索及python实现围棋“吃子”

    前言 "吃子"是围棋最基本的规则之一,但在编写围棋游戏要如何实现?深度优先搜索可以解决这个问题.本文分享的是个人使用深度优先搜索算法及python语言实现"吃子" ...

  2. 基于python pyqt的围棋游戏制作

    文章目录 1.初始化棋盘 2.初始化棋子 3.开始游戏 4.落子设置 5.吃子判断 6 悔棋和弃一子 7 重新开始.推出与切换棋盘 8 显示 9 初始化 本文使用python中的pygame库设计制作 ...

  3. 深度优先搜索及python实现围棋“吃子”

    文章目录 前言 一."吃子"和"气" 1."吃子"和"气"的概念 2.问题转化 二.深度优先搜索 1.表示方法 2.深度 ...

  4. 博弈五子棋(人机对战)算法改进

    基于 EasyX 的五子棋程序. 界面依旧,唯一不同的是算法.改进前的 AI 眼光短浅,只顾当前局面.改进后的 AI 使用 DFS(深度优先搜索)进行对博弈树的遍历,再挑选分值最大的根节点进行落子.具 ...

  5. POJ 1753 翻棋子 (dfs+递归)。

    终于来填坑了.依旧是递归的题目,最近做的都是关于递归的问题.下一个是汉诺塔问题. 这道题也是看了很多别人的博客才弄出来的,但是分析还是要试着自己写一下. 题意是这样的,有一个4*4的棋盘,你可以自定义 ...

  6. 递归——黑白棋子的移动(洛谷 P1259)

    题目选自洛谷P1259 我们先分析一下样例 ooooooo*******--oooooo--******o* oooooo******--o*ooooo--*****o*o* ooooo*****-- ...

  7. 算法竞赛宝典 棋子移动 递归

    大家觉得写还可以,可以点赞.收藏.关注一下吧! 也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn 文章目录 棋子移动

  8. 递归/回溯:八皇后问题N-Queens

    N皇后问题是计算机科学中最为经典的问题之一,该问题可追溯到1848年,由国 际西洋棋棋手马克斯·贝瑟尔于提出了8皇后问题. 将N个皇后放摆放在N*N的棋盘中,互相不可攻击,有多少种摆放方式,每种摆 放 ...

  9. ZOJ1002 Fire Net(非递归版)

    以前用递归的回溯搜索思路做过一次,参见ZOJ1002 Fire Net(递归版),今天想着用非递归的方法试试看,呵呵,比我想象中要难啊,主要还是堆栈里究竟放什么,这一点上思路一直没理清.因此用了整整一 ...

最新文章

  1. bioperl 格式化genebank的输出
  2. spring三大核心学习
  3. 日常生活中如何获得低咖啡因的茶叶
  4. html 闪烁字,HTML最简单的文字闪烁代码
  5. 数模写作必备利器—latex
  6. MATLAB函数使用记录1-plot/line/set
  7. python绝对导入_[编程基础] Python中的绝对导入与相对导入
  8. View DrawingCache的理解
  9. bzoj 1833: [ZJOI2010]count 数字计数(数字0-9的个数)
  10. SpringBoot2整合Flyway(二)
  11. 转分享[Mac] QQ音乐Mac特别版 可以下载无损
  12. DocFetcher 本机文件搜索工具
  13. wps2019怎么调整字间距_wps2019表格和文字间距太大怎么调整?
  14. Python标准库(各种模块介绍)
  15. c语言列宽作用,c语言|格式化输入输出详解
  16. VS2017中MFC的C++设计中给其它窗口发中文消息
  17. c语言常用的运行速度优化,C语言程序设计优化(提速)
  18. C语言中汉字的存储和输出
  19. BZOJ3032 七夕祭 均分纸牌问题的变式 (前缀和+中位数)
  20. 基于双馈风机的调频电源改造方案

热门文章

  1. android手机红外代码HAL,手机红外遥控器发送红外信号到STM32【HAL库】
  2. 去掉Word2007文档眉头的横线
  3. 螺旋探索与自适应混合变异的麻雀搜索-附代码
  4. YOLOV5的FPS计算问题
  5. SAP 详细分析BOM物料清单
  6. 关于手机唯一识别码的研究meid和imei
  7. 2022-2028年中国担保贷款行业市场全景调查及投资潜力研究报告
  8. python登录面向对象_python基础 面向对象一
  9. php计算两个坐标(经度,纬度)之间的方位角
  10. git 手动master_git 如何撤销一次remote的master commit?