1166 The Clocks

原创 2007年10月15日 08:33:00
 
The Clocks
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 3980   Accepted: 1434

Description

 

Input
Your program is to read from standard input. Nine numbers give the start positions of the dials. 0=12 o'clock, 1=3 o'clock, 2=6 o'clock, 3=9 o'clock.

Output
Your program is to write to standard output. Output a shortest sorted sequence of moves (numbers), which returns all the dials to 12 o'clock. You are convinced that the answer is unique.

Sample Input

 

Sample Output

 

Source
IOI 1994

 *********************************************************************************

**************************************************************************************

Source Code
# include <iostream.h>

int move[9][9]={
   //A,B,C,D,E,F,G,H,I
	{1,1,0,1,1,0,0,0,0},//move1
	{1,1,1,0,0,0,0,0,0},//move2
	{0,1,1,0,1,1,0,0,0},//move3
	{1,0,0,1,0,0,1,0,0},//move4
	{0,1,0,1,1,1,0,1,0},//move5
	{0,0,1,0,0,1,0,0,1},//move6
	{0,0,0,1,1,0,1,1,0},//move7
	{0,0,0,0,0,0,1,1,1},//move8
	{0,0,0,0,1,1,0,1,1} //move9
};
int clock[9];//original
int temp[9];//for try
int m[9];//record the times of each move

void LoadClock();
void Move();
bool Check();
void Output();

void main(){
	
	LoadClock();

	for (m[0]=0;m[0]<=3;m[0]++)
	for (m[1]=0;m[1]<=3;m[1]++)
	for (m[2]=0;m[2]<=3;m[2]++)
	for (m[3]=0;m[3]<=3;m[3]++)
	for (m[4]=0;m[4]<=3;m[4]++)
	for (m[5]=0;m[5]<=3;m[5]++)
	for (m[6]=0;m[6]<=3;m[6]++)
	for (m[7]=0;m[7]<=3;m[7]++)
	for (m[8]=0;m[8]<=3;m[8]++)
	{
		
		Move();
		if (Check()==true){
			Output();
			break;
		}		
	}
}

void LoadClock(){
	int i;
	for (i=0;i<9;i++)
		cin>>clock[i];
}

void Move(){
	int i,j;
	for (i=0;i<9;i++){
		temp[i]=clock[i];
		for (j=0;j<9;j++) if(move[j][i])
			temp[i] += m[j];
		temp[i] %= 4;
	}
}

bool Check(){
	int i;
	for (i=0;i<9;i++)	if (temp[i]!=0)	return false;
	return true;
}

void Output(){
	int i,j;
	for (i=0;i<9;i++){
		if (m[i]>0)
			for (j=0;j<m[i];j++)
				cout<<i+1<<' ';
	}
	cout<<endl;
}



4 5 8 9
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
(Figure 1)

There are nine clocks in a 3*3 array (figure 1). The goal is to return all the dials to 12 o'clock with as few moves as possible. There are nine different allowed ways to turn the dials on the clocks. Each such way is called a move. Select for each move a number 1 to 9. That number will turn the dials 90' (degrees) clockwise on those clocks which are affected according to figure 2 below.
Move   Affected clocks


1 ABDE
2 ABC
3 BCEF
4 ADG
5 BDEFH
6 CFI
7 DEGH
8 GHI
9 EFHI
(Figure 2)

POJ 1166 The Clocks 解题报告(高斯消元法 & 逆矩阵)

题目大意:9种操作可以让不同的种转动90度,求最小上升的操作方式。     解题报告:这题解法众多,也很有趣。可以BFS,DFS,9重循环暴搜也没问题= =。当然,为了学习还是用高斯消元法做的。   ...
  • kbdwo
  • kbdwo
  • 2013年08月09日 20:40
  • 1927

设备树学习之(三)Clock

开发板:tiny4412SDK + S702 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boo...
  • lizuobin2
  • lizuobin2
  • 2017年01月15日 18:37
  • 1286

acm.DFS深度搜索专题

DFS深搜应用   搜索被称为“通用的解题法”,在算法和人工智能方面占有非常重要的地位,特别是在各类ACM程序设计比赛中非常常见,在题目中一般位于中间位置,作为中等难度的题目出现。因此我们需要着重...
  • u013594743
  • u013594743
  • 2014年02月04日 13:06
  • 1176

POJ 1166 The Clocks(状压BFS)

用一个数状压9个表的状态,每个表4种情况,最多才4^9,标记空间开得下。 记录路径时,用pre[i]表示i状态之前的状态是哪个,chs[i]表示这一次用的哪种操作到的i状态。BFS过程中每次第一次到...
  • Baoli1008
  • Baoli1008
  • 2015年05月14日 21:31
  • 340

POJ 1166 The Clocks(搜索枚举)

The Clocks Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 17299   Ac...
  • LiuJiuXiaoShiTou
  • LiuJiuXiaoShiTou
  • 2017年04月20日 19:58
  • 162

POJ 1166 The Clocks (暴搜)

POJ 1166 暴搜
  • wdkirchhoff
  • wdkirchhoff
  • 2014年11月19日 11:02
  • 1051

POJ 1166 The Clocks(拨钟问题)

描述有9个时钟,排成一个3*3的矩阵。 现在需要用最少的移动,将9个时钟的指针都拨到12点的位置。共允许有9种不同的移动。如下表所示,每个移动会将若干个时钟的指针沿顺时针方向拨动90度。 移...
  • tp7309
  • tp7309
  • 2016年11月03日 22:22
  • 349

POJ 1166 The Clocks

高斯消元第四题,这次的题很精彩~~ 题目大意: 给出9个钟表的状态,给出九种操作,问最少要操作几次能把所有的钟表调回12点。 解题思路: 对于9个钟表分别列方程,然后高斯消元即...
  • lin375691011
  • lin375691011
  • 2014年08月07日 09:47
  • 6969

poj 1166 The Clocks BFS or 高斯消元

这种题一看到就可以想到暴力搜索,不过用高斯消元解同余方程组应该可以做,但我还是没做出来。 听别人说是由于mod 是 4不是素数,所以高斯消元过程中对4取余会导致解集增大,过程中就不能取余了,但是好像...
  • u010710717
  • u010710717
  • 2013年06月04日 23:52
  • 905

poj1166(the clocks)

题目链接:http://poj.org/problem?id=1166         题目意思:              9只钟表排成3*3的方阵,每只钟表只能指向上、下、左、右四个位置  ...
  • kath_y
  • kath_y
  • 2012年04月10日 12:12
  • 606
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:1166 The Clocks
举报原因:
原因补充:

(最多只允许输入30个字)