有9个时钟,排成一个3*3的矩阵。
|-------| |-------| |-------|
| | | | | | |
|---O | |---O | | O |
| | | | | |
|-------| |-------| |-------|
A B C
|-------| |-------| |-------|
| | | | | |
| O | | O | | O |
| | | | | | | | |
|-------| |-------| |-------|
D E F
|-------| |-------| |-------|
| | | | | |
| O | | O---| | O |
| | | | | | | |
|-------| |-------| |-------|
G H I
(图 1)
现在需要用最少的移动,将9个时钟的指针都拨到12点的位置。共允许有9种不同的移动。如下表所示,每个移动会将若干个时钟的指针沿顺时针方向拨动90度。
移动 影响的时钟
1 ABDE
2 ABC
3 BCEF
4 ADG
5 BDEFH
6 CFI
7 DEGH
8 GHI
9 EFHI
输入
9个整数,表示各时钟指针的起始位置,相邻两个整数之间用单个空格隔开。其中,0=12点、1=3点、2=6点、3=9点。
输出
输出一个最短的移动序列,使得9个时钟的指针都指向12点。按照移动的序号从小到大输出结果。相邻两个整数之间用单个空格隔开。
样例输入
3 3 0
2 2 2
2 1 2
样例输出
|-------| |-------| |-------|
| | | | | | |
|---O | |---O | | O |
| | | | | |
|-------| |-------| |-------|
A B C
|-------| |-------| |-------|
| | | | | |
| O | | O | | O |
| | | | | | | | |
|-------| |-------| |-------|
D E F
|-------| |-------| |-------|
| | | | | |
| O | | O---| | O |
| | | | | | | |
|-------| |-------| |-------|
G H I
(图 1)
现在需要用最少的移动,将9个时钟的指针都拨到12点的位置。共允许有9种不同的移动。如下表所示,每个移动会将若干个时钟的指针沿顺时针方向拨动90度。
移动 影响的时钟
1 ABDE
2 ABC
3 BCEF
4 ADG
5 BDEFH
6 CFI
7 DEGH
8 GHI
9 EFHI
输入
9个整数,表示各时钟指针的起始位置,相邻两个整数之间用单个空格隔开。其中,0=12点、1=3点、2=6点、3=9点。
输出
输出一个最短的移动序列,使得9个时钟的指针都指向12点。按照移动的序号从小到大输出结果。相邻两个整数之间用单个空格隔开。
样例输入
3 3 0
2 2 2
2 1 2
样例输出
4 5 8 9
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int a[10],maxx=99999,t[9]= {0};
for(int i=0; i<9; i++)
{
cin>>a[i];
}
for(int i1=0; i1<4; i1++)
{
for(int i2=0; i2<4; i2++)
for(int i3=0; i3<4; i3++)
for(int i4=0; i4<4; i4++)
for(int i5=0; i5<4; i5++)
for(int i6=0; i6<4; i6++)
for(int i7=0; i7<4; i7++)
for(int i8=0; i8<4; i8++)
for(int i9=0; i9<4; i9++)
{
if((i1+i2+i4+a[0])%4==0&&(i1+i2+i3+i5+a[1])%4==0&&(i3+i2+i6+a[2])%4==0&&(i1+i4+i5+i7+a[3])%4==0&&
(i1+i3+i5+i7+i9+a[4])%4==0&&(i3+i5+i6+i9+a[5])%4==0&&(i4+i7+i8+a[6])%4==0&&(i5+i7+i8+i9+a[7])%4==0&&
(i6+i8+i9+a[8])%4==0)
{
int sum=i1+i2+i3+i4+i5+i6+i7+i8+i9;
if(maxx>sum)
{
maxx=sum;
t[0]=i1;
t[1]=i2;
t[2]=i3;
t[3]=i4;
t[4]=i5;
t[5]=i6;
t[6]=i7;
t[7]=i8;
t[8]=i9;
}
}
}
}
for (int cur = 0; cur < 9; cur++)
while(t[cur]--)
cout<<cur + 1<<" ";
return 0;
}