话说中国盒子问题在蒟蒻的程序界留名已久,但是在百度上竟然找不到这种水题甚至是介绍[笑][呵呵][笑][呵呵][笑][呵呵][笑][呵呵][笑][呵呵]。
身为一个蒟蒻,我专门把这个程序又搞了一遍,顺便看了看水题的背景。
先上题目= -
一看就很水对不对= -
第一秒反应搜索,还是暴力解法,毕竟目标一定,格子如此的小,数据量不会太大,于是= -直接代码(主要是因为我懒得打字),蒟蒻的水题大家一起体会。
#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数组= =懒于重复收拾一个空间了,空间换时间就挺不错的。
当然,数据开的小了点= =大点也是无所谓的。。
蒟蒻的一道题就这么水完了,不过这道题对于搜索这个算法来说还是有不小的引导作用。
水的一笔= -= 蒟蒻去做题了同志们再见。