一道水的不能再水的中国盒子问题——小试牛刀(3)

      话说中国盒子问题在蒟蒻的程序界留名已久,但是在百度上竟然找不到这种水题甚至是介绍[笑][呵呵][笑][呵呵][笑][呵呵][笑][呵呵][笑][呵呵]。

身为一个蒟蒻,我专门把这个程序又搞了一遍,顺便看了看水题的背景。

先上题目= -

一看就很水对不对= -

第一秒反应搜索,还是暴力解法,毕竟目标一定,格子如此的小,数据量不会太大,于是= -直接代码(主要是因为我懒得打字),蒟蒻的水题大家一起体会。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int i,j,k,l,n,m,p,h,t,f,x;
int b[10001];
string s1,s2,list,a[1001];
void del(string c)
{
    c=""; 
}
int main()
{
    cin>>s1;
    s2="AAAA00BBBB";
    if(s1==s2) 
    {
        cout<<"0"<<endl;
        return 0;
    }
    a[1]=s1;
    string sc="00";
    f=1;h=0;
    do
    {
        h++;
        for(i=1;i<=9;i++)
        {
            if(a[h][i]!='0'&&a[h][i+1]!='0')
            {
                x=0;
                n=a[h].find(sc,0);
                m=0;f=f+1;
                     a[f]=a[h];
                     a[f][n]=a[f][i];
                     a[f][n+1]=a[f][i+1];
                     a[f][i]='0';
                     a[f][i+1]='0';
                     for(j=1;j<=f-1;j++) 
                      if (a[f]==a[j])
                       {
                    m=9;
                    f=f-1;
                    del(a[f+1]);
                    break;
                       }   
                 if(m!=9) b[f]=b[h]+1;
    }
                if(a[f]==s2) 
    { 
                cout<<b[f];
                return 0;
    }
    }
    }while(h!=f);
 } 

del是个清空函数,将中间的状态string清掉。由于目标状态一定,所以我们只需要把它当字符串输进去即可。

由于怎么一动都是两个00在一起,所以00这个东西就可以直接查找位置。

n=a[h].find(sc,0);这句话就是用来查找‘0’的位置。
因为用的是string所以直接用函数就好了= - =不是我懒。。。。

数组开了个string数组= =懒于重复收拾一个空间了,空间换时间就挺不错的。
当然,数据开的小了点= =大点也是无所谓的。。

蒟蒻的一道题就这么水完了,不过这道题对于搜索这个算法来说还是有不小的引导作用。

水的一笔= -= 蒟蒻去做题了同志们再见。

原文地址:https://www.cnblogs.com/qianyintinghan/p/5342601.html