计蒜客-一维跳棋

一维跳棋是一种在
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
#include"string.h"
#include"queue"
#include
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 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=gd.front();
        gd.pop();
        if(nn.qipan==res)
        {
            for(int i=0;i1;i++)
            {
                if(i!=0&&i%5==0)
                {
                    cout<else
                cout<" ";

            }
            cout<1]<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'W');
    sta.push_back(' ');
    for(int i=0;i'B');

    for(int i=0;i'B');
    res.push_back(' ');
    for(int i=0;i'W');

    bfs(); 



    return 0;
}

你可能感兴趣的:(计蒜客)