| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:第一次贴代码,大神勿喷In Reply To:第一次贴代码,大神勿喷 Posted by:zhanglanqing at 2016-02-10 12:48:12 > #include<iostream>
> #include<stdio.h>
> #include<deque>
> #define N 65533+3
> using namespace std;
> int a[N];
> int c[16][4]={
> {1,4,-1,-1},
> {0,2,5,-1},
> {1,6,3,-1},
> {2,7,-1,-1},
>
> {0,5,8,-1},
> {1,4,6,9},
> {2,5,7,10},
> {3,6,11,-1},
>
> {4,9,12,-1},
> {5,8,10,13},
> {6,9,11,14},
> {7,10,15,-1},
>
> {8,13,-1,-1},
> {9,12,14,-1},
> {13,10,15,-1},
> {11,14,-1,-1}
> };
>
> unsigned int get_start(int *A)
> {
> unsigned int x=0;
> for(int i=0;i<16;i++)
> {
> if(A[i])
> {
> x|=(1<<i);
> }
> }
> return x;
>
> }
>
>
> int start[16];
> int main()
> {
> //freopen("/home/zlq/easy_acming/in","r",stdin);
> for(int i=0;i<N;i++){a[i]=-1;}//全部设置成-1;
> string tmp;
> for(int line=0;line<4;line++)
> {
> cin>>tmp;
> for(int i=0;i<4;i++)
> {
> if(tmp[i]=='b')
> {
> start[line*4+i]=1;
> }
> }
> }
> int begin=get_start(start);
> a[begin]=0;
> deque<unsigned int> d;
> d.push_back(begin);
> int now;
> int flag=0;
> while(d.empty()==false)
> {
> now=d.front();
> d.pop_front();
> if(now==65535||now==0){flag=1;break;}
> else
> {
> for(int i=0;i<16;i++)//一共可以有16种选择..16中变换
> {
> unsigned int gen=now;
> gen=gen^(1<<i);
> for(int j=0;j<4;j++)//每种变换,将其中的4位进行取反操作
> {
> if(c[i][j]!=-1)
> gen=gen^(1<<c[i][j]);
> }
> if(a[gen]==-1)
> {
> a[gen]=a[now]+1;
> d.push_back(gen);
> }
>
> }
> }
> }
> if(flag==1)
> cout<<a[now]<<endl;
> else
> cout<<"Impossible"<<endl;
>
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator