/*
ID: 551100k1
LANG: C++
TASK: clocks
*/
#include<stdio.h>
#include<iostream>
#include<map>
#include<queue>
#include<vector>
using namespace std;
bool check(vector<int> v){
int i;
for(i=0;i<9;i++)
if(v[i]!=12)
return 0;
return 1;
}
struct P{
vector<int> X,Y;
}in,out;
int t[5][5][5][5][5][5][5][5][5];
vector<int> vec,s;
queue<P> que;
int main(){
freopen("clocks.in","r",stdin);
freopen("clocks.out","w",stdout);
int i,j,n,m;
for(i=0;i<9;i++)
scanf("%d",&n),vec.push_back(n);
in.X=vec;
t[in.X[0]/3][in.X[1]/3][in.X[2]/3][in.X[3]/3][in.X[4]/3][in.X[5]/3][in.X[6]/3][in.X[7]/3][in.X[8]/3]=1;
que.push((P){vec,s});
while(que.size()){
out=que.front();
que.pop();
if(check(out.X)) break;
for(i=1;i<=9;i++){
in=out;
if(i==1) in.X[0]+=3,in.X[1]+=3,in.X[3]+=3,in.X[4]+=3,in.Y.push_back(1);
if(i==2) in.X[0]+=3,in.X[1]+=3,in.X[2]+=3,in.Y.push_back(2);
if(i==3) in.X[1]+=3,in.X[2]+=3,in.X[4]+=3,in.X[5]+=3,in.Y.push_back(3);
if(i==4) in.X[0]+=3,in.X[3]+=3,in.X[6]+=3,in.Y.push_back(4);
if(i==5) in.X[1]+=3,in.X[3]+=3,in.X[4]+=3,in.X[5]+=3,in.X[7]+=3,in.Y.push_back(5);
if(i==6) in.X[2]+=3,in.X[5]+=3,in.X[8]+=3,in.Y.push_back(6);
if(i==7) in.X[3]+=3,in.X[4]+=3,in.X[6]+=3,in.X[7]+=3,in.Y.push_back(7);
if(i==8) in.X[6]+=3,in.X[7]+=3,in.X[8]+=3,in.Y.push_back(8);
if(i==9) in.X[4]+=3,in.X[5]+=3,in.X[7]+=3,in.X[8]+=3,in.Y.push_back(9);
for(j=0;j<9;j++)
if(in.X[j]>12)
in.X[j]-=12;
if(t[in.X[0]/3][in.X[1]/3][in.X[2]/3][in.X[3]/3][in.X[4]/3][in.X[5]/3][in.X[6]/3][in.X[7]/3][in.X[8]/3]==0){
t[in.X[0]/3][in.X[1]/3][in.X[2]/3][in.X[3]/3][in.X[4]/3][in.X[5]/3][in.X[6]/3][in.X[7]/3][in.X[8]/3]=1;
que.push(in);
}
}
}
printf("%d",out.Y[0]);
for(i=1;i<out.Y.size();i++)
printf(" %d",out.Y[i]);
puts("");
}
沒有留言:
張貼留言