zoukankan      html  css  js  c++  java
  • 91 棋盘游戏

    91 棋盘游戏

    作者: xxx时间限制: 1S章节: 宽度优先搜索

    问题描述 :

    大小为3的棋盘游戏里有3个白色棋子,3个黑色棋子,和一个有7个格子一线排开的木盒子。3个白棋子被放在一头,3个黑棋子被放在另一头,中间的格子空着。

    初始状态: WWW_BBB

    目标状态: BBB_WWW

    在这个游戏里有两种移动方法是允许的:

    1. 你可以把一个棋子移到与它相邻的空格;

    2. 你可以把一个棋子跳过一个(仅一个)与它不同色的棋子到达空格。

    大小为N的棋盘游戏包括N个白棋子,N个黑棋子,还有有2N+1个格子的木盒子。

    这里是3-棋盘游戏的解,包括初始状态,中间状态和目标状态:

    WWW BBB

    WW WBBB

    WWBW BB

    WWBWB B

    WWB BWB

    W BWBWB

    WBWBWB

    BW WBWB

    BWBW WB

    BWBWBW

    BWBWB W

    BWB BWW

    B BWBWW

    BB WBWW

    BBBW WW

    BBB WWW

    请编一个程序解大小为N的棋盘游戏(1 <= N <= 12)。要求用最少的移动步数实现。

    输入说明 :

    一个整数N。

    输出说明 :

    用空格在棋盘的位置(位置从左到右依次为1, 2, ..., 2N+1)表示棋盘的状态。输出棋盘的状态变换序列,每行20个数(除了最后一行)。 输出的解还应当有最小的字典顺序(即如果有多组移动步数最小的解,输出第一个数最小的解;如果还有多组,输出第二个数最小的解;...)。

    输入范例 :
    9
    输出范例 :
    9 11 12 10 8 7 9 11 13 14 12 10 8 6 5 7 9 11 13 15
    16 14 12 10 8 6 4 3 5 7 9 11 13 15 17 18 16 14 12 10
    8 6 4 2 1 3 5 7 9 11 13 15 17 19 18 16 14 12 10 8
    6 4 2 3 5 7 9 11 13 15 17 16 14 12 10 8 6 4 5 7
    9 11 13 15 14 12 10 8 6 7 9 11 13 12 10 8 9 11 10

    code

    #include <cstdio>
    #include <vector>
    #include <iostream>
    using namespace std;
    int main()
    {
    	int n;
    	cin >> n;
    	vector<int> num;
    	int len = 2;
    	int flag = 0;
    	int m = n;
    	while (len<=m+1)
    	{
    		if (flag == 0)
    		{
    			for (int i = 0; i < len; i++)
    			{
    				num.push_back(n);
    				if (i != len - 1)
    				{
    					n += 2;
    				}
    			}
    			flag = 1;
    			n += 1;
    		}
    		else
    		{
    			for (int i = 0; i < len; i++)
    			{
    				num.push_back(n);
    				if (i != len - 1)
    				{
    					n -= 2;
    				}
    			}
    			flag = 0;
    			n -= 1;
    		}
    		len++;
    	}
    	len -= 2;
    	flag = 0;
    	if (len % 2 == 0)
    	{
    		n = *(num.end() - 1) + 1;
    		while (len >= 1)
    		{
    			if (flag == 0)
    			{
    				for (int i = 0; i < len; i++)
    				{
    					num.push_back(n);
    					if (i != len - 1)
    					{
    						n += 2;
    					}
    				}
    				flag = 1;
    				n -= 1;
    			}
    			else
    			{
    				for (int i = 0; i < len; i++)
    				{
    					num.push_back(n);
    					if (i != len - 1)
    					{
    						n -= 2;
    					}
    				}
    				flag = 0;
    				n += 1;
    			}
    			len--;
    		}
    	}
    	else
    	{
    		n = *(num.end() - 1) - 1;
    		while (len >= 1)
    		{
    			if (flag == 0)
    			{
    				for (int i = 0; i < len; i++)
    				{
    					num.push_back(n);
    					if (i != len - 1)
    					{
    						n -= 2;
    					}
    				}
    				flag = 1;
    				n += 1;
    			}
    			else
    			{
    				for (int i = 0; i < len; i++)
    				{
    					num.push_back(n);
    					if (i != len - 1)
    					{
    						n += 2;
    					}
    				}
    				flag = 0;
    				n -= 1;
    			}
    			len--;
    		}
    	}
    	int count = 0,index=0;
    	for (vector<int>::iterator it = num.begin(); it != num.end(); it++)
    	{
    		cout << *it;
    		count++;
    		index++;
    		if (count < 20&&index<(int)num.size())
    		{
    			cout << " ";
    		}
    		if (count == 20)
    		{
    			cout << endl;
    			count = 0;
    		}
    	}
    	cout << endl;
    	return 0;
    }
    
    Yesterday is history,tomorrow ismystery,but today is a gift!That why it is called Present!
  • 相关阅读:
    Codeforces Round #370 (Div. 2) C. Memory and De-Evolution 水题
    Codeforces Round #370 (Div. 2) B. Memory and Trident 水题
    Codeforces Round #370 (Div. 2) A. Memory and Crow 水题
    Codeforces Round #258 (Div. 2) E. Devu and Flowers 容斥
    Codeforces Round #258 (Div. 2) D. Count Good Substrings 水题
    Codeforces Round #258 (Div. 2) C. Predict Outcome of the Game 水题
    Codeforces Round #258 (Div. 2) . Sort the Array 贪心
    Codeforces Round #258 (Div. 2) A. Game With Sticks 水题
    Codeforces Beta Round #14 (Div. 2) D. Two Paths 树形dp
    Codeforces Beta Round #14 (Div. 2) C. Four Segments 水题
  • 原文地址:https://www.cnblogs.com/VictorierJwr/p/12775691.html
Copyright © 2011-2022 走看看