计蒜客-一维跳棋
来源:互联网 发布:网络协同是什么意思 编辑:程序博客网 时间:2024/05/16 18:46
一维跳棋是一种在
1×(2N+1)1\times(2N+1)
1×(2N+1) 的棋盘上玩的游戏。一共有
NN
N 个棋子,其中
NN
N 个是黑的,
NN
N 个是白的。游戏开始前,
NN
N 个白棋子被放在一头,
NN
N 个黑棋子被放在另一头,中间的格子空着。在这个游戏里有两种移动方法是允许的:你可以把一个棋子移到与它相邻的空格;你可以把一个棋子跳过一个(仅一个)与它不同色的棋子到达空格。
对于
N=3N=3
N=3 的情况,棋盘状态依次为:
1
WWW BBB
2
WW WBBB
3
WWBW BB
4
WWBWB B
5
WWB BWB
6
W BWBWB
7
WBWBWB
8
BW WBWB
9
BWBW WB
10
BWBWBW
11
BWBWB W
12
BWB BWW
13
B BWBWW
14
BB WBWW
15
BBBW WW
16
BBB WWW
对应的空格所在的位置(从左数)为:3 5 6 4 2 1 3 5 7 6 4 2 3 5 4。
输入格式
输入仅一个整数,表示针对
N(1≤N≤12)N(1 \leq N \leq 12)
N(1≤N≤12) 的取值。
输出格式
依次输出空格所在棋盘的位置,每个整数间用空格分隔,每行
55
5 个数(每行结尾无空格,最后一行可以不满
55
5 个数;如果有多组移动步数最小的解,输出第一个数最小的解)
样例输入
4
样例输出
4 6 7 5 3
2 4 6 8 9
7 5 3 1 2
4 6 8 7 5
3 4 6 5
未完标记
#include"iostream"#include<vector>#include"string.h"#include"queue"#include<map>using namespace std;int n;string sta;string res;vector<int> gg;map<string,int> panduan;struct node{ string qipan; int kg; int step; vector<int> jj;};queue<node> gd;void bfs(){ node mm,nn; mm.qipan=sta; mm.kg=n+1; mm.step=0; mm.jj=gg; gd.push(mm); panduan[mm.qipan]=2; while(!gd.empty()) { //cout<<nn.qipan<<endl; nn=gd.front(); gd.pop(); if(nn.qipan==res) { for(int i=0;i<nn.step-1;i++) { if(i!=0&&i%5==0) { cout<<nn.jj[i]<<endl; } else cout<<nn.jj[i]<<" "; } cout<<nn.jj[nn.step-1]<<endl; return; } for(int i=-2;i<=2;i++) { if(i==0) continue; mm=nn; mm.kg=nn.kg+i; if(mm.kg>0&&mm.kg<=2*n+1) { mm.step+=1; char temp=mm.qipan[nn.kg-1]; mm.qipan[nn.kg-1]=mm.qipan[mm.kg-1]; mm.qipan[mm.kg-1]=temp; if(panduan[mm.qipan]==2) continue; panduan[mm.qipan]=2; mm.jj.push_back(mm.kg); gd.push(mm); } } }}int main(){ cin>>n; for(int i=0;i<n;i++) sta.push_back('W'); sta.push_back(' '); for(int i=0;i<n;i++) sta.push_back('B'); for(int i=0;i<n;i++) res.push_back('B'); res.push_back(' '); for(int i=0;i<n;i++) res.push_back('W'); bfs(); return 0;}
0 0
- 计蒜客-一维跳棋
- 跳棋
- 跳棋
- 跳棋
- 跳棋
- 跳棋
- 跳棋
- cocos2d js游戏 咸鱼跳棋(一)
- dp跳棋
- 跳棋jump
- HDU1087 跳棋
- 国际跳棋
- C#编写跳棋程序
- 跳棋被搞定了
- 跳棋棋盘图片
- C/C++跳棋问题
- 西洋跳棋走棋算法
- 国际跳棋的开局
- 最全面的Android Webview详解
- 【Java学习笔记】02.标识符、常量和数据类型
- Newtonsoft.Json.dll版本冲突
- Linux学习笔记4
- Android弹幕实现:基于B站弹幕开源系统(5)-抽象和复用
- 计蒜客-一维跳棋
- leetcode解题之 16. 3Sum Closest Java版(结果离目标值最近三个数字和)
- POJ 3237 Tree(树链剖分 + 单点更新 + 区间更新 + 区间查询)
- javascript Style属性的使用
- jboss相关命令
- win10 开始菜单图标点击右键没反应终极解决办法--非修改注册表
- Linux学习之第六章
- 设计模式总体说明
- 【学习指导】Kaggle入门