|
- #include <algorithm>
- #include <iostream>
- #include <cmath>
- #include <cstring>
- #include <map>
- #include <string>
- #include <vector>
- #include <queue>
- #include <stack>
- #include <cstdio>
- #include <cstdlib>
- using namespace std;
- int a[40];
- struct node
- {
- int er,step,last;
- };
- int main()
- {
- queue<node> q;
- for(int i=1;i<=9;i++)
- scanf("%d",&a[i]);
- int z=0;
- for(int i=9,j=1;i>=1;i--,j*=2)
- z+=(a[i]*j);
- node l={z,0,-1};
- q.push(l);
- node u;
- int t[40];
- while(!q.empty())
- {
- u=q.front();q.pop();
- if(u.er==511)
- {
- printf("%d",u.step);
- return 0;
- }
- z=u.er;
- for(int i=1,j=256;i<=9;i++,j/=2)
- {
- t[i]=z/j;
- z%=j;
- }
- for(int i=1;i<=9;i++)
- {
- if(i==u.last) continue;
- t[i]^=1;
- if(i-3>=1)
- t[i-3]^=1;
- if(i+3<=9)
- t[i+3]^=1;
- if((i-1)%3!=0)
- t[i-1]^=1;
- if((i+1)%3!=1)
- t[i+1]^=1;
- z=0;
- for(int k=9,j=1;k>=1;k--,j*=2)
- z+=(t[k]*j);
- node t2={z,u.step+1,i};
- q.push(t2);
- t[i]^=1;
- if(i-3>=1)
- t[i-3]^=1;
- if(i+3<=9)
- t[i+3]^=1;
- if((i-1)%3!=0)
- t[i-1]^=1;
- if((i+1)%3!=1)
- t[i+1]^=1;
- }
- }
- return 0;
- }
复制代码 |
|