The Clocks
题目链接:
题意:给出9个时钟的初始状态,问最少通过几次操作,能使每个时钟指向12点(每次操作都会使对应时钟顺时针旋转90度)
暴搜
考虑到每种操作最多进行3次(如果进行4次就和不进行操作一样),直接用49的暴搜
代码如下:
1 #include2 #include 3 #include 4 #define pb(x) push_back(x) 5 #define mk(x,y) make_pair(x,y) 6 #define f(x) (x-'A') 7 using namespace std; 8 typedef pair P; 9 int a[9],ans[9],s[9],Min;10 vector p[9];11 void check(){12 int sum=0,b[9];13 for(int i=0;i<9;++i)b[i]=a[i];14 for(int i=0;i<9;++i){15 sum+=s[i];16 for(int j=0;j<(int)p[i].size();++j){17 int t=p[i][j];18 b[t]=(b[t]+s[i])%4;19 }20 }21 for(int i=0;i<9;++i)22 if(b[i])return;23 if(sum =9){30 check();31 return;32 }33 for(int i=0;i<4;++i){34 s[op]=i;35 dfs(op+1);36 }37 }38 int main(void){39 p[0].pb(f('A')),p[0].pb(f('B')),p[0].pb(f('D')),p[0].pb(f('E'));40 p[1].pb(f('A')),p[1].pb(f('B')),p[1].pb(f('C'));41 p[2].pb(f('B')),p[2].pb(f('C')),p[2].pb(f('E')),p[2].pb(f('F'));42 p[3].pb(f('A')),p[3].pb(f('D')),p[3].pb(f('G'));43 p[4].pb(f('B')),p[4].pb(f('D')),p[4].pb(f('E')),p[4].pb(f('F')),p[4].pb(f('H'));44 p[5].pb(f('C')),p[5].pb(f('F')),p[5].pb(f('I'));45 p[6].pb(f('D')),p[6].pb(f('E')),p[6].pb(f('G')),p[6].pb(f('H'));46 p[7].pb(f('G')),p[7].pb(f('H')),p[7].pb(f('I'));47 p[8].pb(f('E')),p[8].pb(f('F')),p[8].pb(f('H')),p[8].pb(f('I'));48 Min=100000000;49 for(int i=0;i<9;++i)scanf("%d",&a[i]);50 dfs(0);51 for(int i=0;i<9;++i)52 for(int j=0;j