poj1166(the clocks)
来源:互联网 发布:昆山市宏观经济数据库 编辑:程序博客网 时间:2024/06/17 13:17
题目链接:http://poj.org/problem?id=1166
题目意思:
9只钟表排成3*3的方阵,每只钟表只能指向上、下、左、右四个位置
9种作用方式,每种使一些钟表的指针右转90°
使用这9种作用,使得所有钟表都指向正上方 (记为状态0)
求使得总作用次数最少的策略
分析:每只钟表被拨动的次数不会超过三次,因为三次后就又回到了初始状态。
代码:
#include<stdio.h>#include<string.h>int move[9][9]={ //记录口令对每个钟表时刻的影响 {1,1,0,1,1,0,0,0,0}, {1,1,1,0,0,0,0,0,0}, {0,1,1,0,1,1,0,0,0}, {1,0,0,1,0,0,1,0,0}, {0,1,0,1,1,1,0,1,0}, {0,0,1,0,0,1,0,0,1}, {0,0,0,1,1,0,1,1,0}, {0,0,0,0,0,0,1,1,1}, {0,0,0,0,1,1,0,1,1}};int num[9],tmp[9],In_dial[9];//num[i]保存指令i的作用次数int finished;int judge() //判断是否将所有的时刻拨到了12点{ int i,j; for(i=0;i<9;i++) tmp[i]=In_dial[i]; for(i=0;i<9;i++) for(j=0;j<9;j++) tmp[i]=(tmp[i]+move[j][i]*num[j])%4;for(i=0;i<9;i++)if(tmp[i])return 0;return 1;} void output() //输出拨动的最短序列{ int i,j; for(i=0;i<9;i++) for(j=0;j<num[i];j++) printf("%d ",i+1); printf("\n");}void dfs(int opration){int i;if(judge()){finished=1;output();return;}if(opration>=9)return ;for(i=0;i<4;i++){num[opration]=i;dfs(opration+1);if(finished)return ;}}void main(){int i;for(i=0;i<9;i++)scanf("%d",&In_dial[i]);memset(num,0,sizeof(num));finished=0;dfs(0);return ;}
- poj1166(the clocks)
- POJ1166 the clocks
- POJ1166 The Clocks [枚举]
- poj1166--The Clocks(高斯消元)
- poj1166--The Clocks(高斯消元)
- The Clocks
- The Clocks
- The Clocks
- The Clocks
- The clocks
- The Clocks
- The Clocks
- USACO 1.4 The Clocks (clocks)
- USACO6.5.4 The Clocks(clocks)
- poj1166
- poj1166
- POJ1166
- USACO Section 1.4 The Clocks (clocks)
- 一个外国孩子眼中的《新华字典》
- JavaScript相册预览
- 用 VS2008 编写动态链接库
- Objective-C 编程语言(5)属性----运行时的区别
- 第8周-任务3-实现分数类中的运算符重载
- poj1166(the clocks)
- 个人对kobject的一点研究
- 深入学习Tomcat----自己动手写服务器(附服务器源码)
- 对于办公室一族和电脑工作者导致手脚发麻的预防方法
- 黑马程序员_学习笔记13_asp.net之Session原理解析
- 学习笔记 2012 4 9
- 软件大赛题目----(第一个)Java
- 【JS每日练习】实现字体循环流动
- 第8章-任务4-实现分数类中的运算符重载(分数与整数运算)