代码1:纯枚举
不需要单独判断最小方案;
参考:https://blog.csdn.net/Ericipher/article/details/79661439

#include <iostream>
#include <cstring>
using namespace std;int arr[10], num[10];void Print(int n,int x) {for (int j = 1; j <= n; j++)printf("%d ", x);
}int main() {int i, i1, i2, i3, i4, i5, i6, i7, i8, i9;for (i = 0; i < 9; i++)cin >> arr[i];for(i1=0;i1<4;i1++)//第i种方案使用了i1次for (i2 = 0; i2 < 4; i2++)for (i3 = 0; i3 < 4; i3++)for (i4 = 0; i4 < 4; i4++)for (i5 = 0; i5 < 4; i5++)for (i6 = 0; i6 < 4; i6++)for (i7 = 0; i7 < 4; i7++)for (i8 = 0; i8 < 4; i8++)for (i9 = 0; i9 < 4; i9++) {num[0] = (arr[0] + i1 + i2 + i4) % 4;num[1] = (arr[1] + i1 + i2 + i3 + i5) % 4;num[2] = (arr[2] + i2 + i3 + i6) % 4;num[3] = (arr[3] + i1 + i4 + i5 + i7) % 4;num[4] = (arr[4] + i1 + i3 + i5 + i7 + i9) % 4;num[5] = (arr[5] + i3 + i5 + i6 + i9) % 4;num[6] = (arr[6] + i4 + i7 + i8) % 4;num[7] = (arr[7] + i5 + i7 + i8 + i9) % 4;num[8] = (arr[8] + i6 + i8 + i9) % 4;int sum = 0;for (i = 0; i < 9; i++)sum += num[i];if (sum == 0) {//每个时钟都归位Print(i1, 1);Print(i2, 2);Print(i3, 3);Print(i4, 4);Print(i5, 5);Print(i6, 6);Print(i7, 7);Print(i8, 8);Print(i9, 9);return 0;}}
}

代码2枚举+剪枝

  1. 每次拨动指针转90度,那么有效的拨动数只能是0、1、2、3。比如又再拨动一次就会重复拨动0次的效果。
  2. 一个移动方案有4种不同的拨动方式,一共有9个移动方案,那么可能的解就有4^9个。
  3. 此题只要求我们求最小移动的次数,那么在枚举的过程中,如果发现当前枚举的情况已超过最小移动次数,可以剪枝。
    参考:https://blog.csdn.net/tp7309/article/details/53027077
    AC代码
//枚举+剪枝
#include <iostream>
#include <cstring>
using namespace std;const int N = 9;
int cases[N][N] = {{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 arr[N];
int minCount = 4 * N + 1;//每个时钟拨4次,一定可以归位
int res[N];//count:存储本次递归各方案使用次数 ,num: 本次采取第num种方案;curCount: 目前一共走了几步;
void calc(int(&count)[N], int num, int curCount) {if (curCount > minCount)//当前次数>minCount,剪枝return;if (num == N) {//递归出口int j;for (j = 0; j < N; j++) {//第j个时钟是否归位int sum = arr[j];for (int k = 0; k < N; k++) {//每种方案sum += count[k] * cases[k][j];}if (sum % 4 != 0)//没有归位break;}if (j == N) {//所有时钟归位if (curCount < minCount) {minCount = curCount;memcpy(res, count, sizeof(count));//更新结果}}return;}int nextNum = num + 1;for (count[num] = 0; count[num] < 4; count[num]++)//第num种方案采取count[num]次calc(count, nextNum, curCount + count[num]);//递归
}int main() {memset(res, 0, sizeof(res));bool flag = true;for (int i = 0; i < N; i++) {cin >> arr[i];if (arr[i] % 4 != 0)flag = false;}if (flag)//一开始所有时钟都归位return 0;int count[N];//存储采取0-8每种方案的次数calc(count, 0, 0);//从第0方案到第8方案,遍历for (int i = 0; i < N; i++) {for (int j = 0; j < res[i]; j++)cout << i + 1 << " ";}return 0;
}

1166:The Clocks相关推荐

  1. POJ 1166 The Clocks (爆搜 || 高斯消元)

    题目链接 题意: 输入提供9个钟表的位置(钟表的位置只能是0点.3点.6点.9点,分别用0.1.2.3)表示.而题目又提供了9的步骤表示可以用来调正钟的位置,例如1 ABDE表示此步可以在第一.二.四 ...

  2. POJ的题目分类(两个版本)

    版本一: 简单题 1000A+B Problem 1001Exponentiation 1003 Hangover 1004 Financial Management 1005 I Think I N ...

  3. POJ前面的题目算法思路【转】

    1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...

  4. java判断素数1037_ACM离线题库超级全

    [实例简介] 超级多的题库有离线的适合没网时做,ACMer必备,有杭电OJ,北大OJ [实例截图] [核心代码] 804f1873-5659-4f1d-bc49-31fa9b551299 └── 题库 ...

  5. 高斯消元法java语言设计_高斯消元法(Gauss Elimination)【超详解模板】

    高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵. 高斯消元法的原理是: 若用初等行变换将增广矩阵 化为 ,则AX = B与CX = D是同解方程 ...

  6. POJ 超详细分类

    POJ 各题算法 1000    A+B Problem            送分题     49%    2005-5-7 1001    Exponentiation         高精度   ...

  7. 暑期集训5:并查集 线段树 练习题F:  HDU - 1166 ​​​​​​​

    2018学校暑期集训第五天--并查集 线段树 练习题F  --   HDU - 1166 敌兵布阵 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A ...

  8. TCL中Ports/Pins/Nets/Cells/Clocks之间的交互关系?

    前言 先给出近期文章列表: 逻辑设计中复位的稳妥处理方法? 逻辑设计中需要显式地使用IBUF以及OBUF类似的原语吗? TCL中关于管脚(Ports)的一些使用方法? TCL中关于Pins的一些使用方 ...

  9. TimeQuest约束外设之诡异的Create Generated Clocks用法

    最近在altera FPGA里设计一个外设的驱动模块,模块本身逻辑很简单如下图所示,但是模块和外设之间的时序约束问题搞的很头疼,今天先讲讲总结的一些Timequest下外设约束方法,特别是那毫无用户体 ...

最新文章

  1. 优秀领导者,离不开这6个品质
  2. swiper4自动轮播切换手动触碰后停止踩坑——属性disableOnInteraction
  3. Maven的pom文件那些事
  4. 5.1.2 IO控制器
  5. MySQL 8.0 Server层最新架构详解
  6. shutil的一些基本用法
  7. TMS320F28335——IO控制/定时计操作
  8. Linux学习:第六章-Linux服务和进程管理
  9. 听说IT人的目标都是成为架构师,那么请收下这份架构养成计划
  10. 学习hashtable,处理“海量”数据
  11. uva 10891 - Game of Sum
  12. 阿里云HBase全新发布X-Pack 赋能轻量级大数据平台
  13. 从规范去看Function.prototype.call到底是怎么工作的?
  14. 达梦数据库SQL查询报错不是 GROUP BY 表达式解决方法
  15. 中国移动5G专网运营体系:一支队伍、一个平台、一把钥匙
  16. 鸡兔同笼问题,假设鸡兔同笼,上有35个头,下有94只足,问鸡兔分别有几只?
  17. Xcode菜单及常用快捷键大全
  18. 最具影响力的机器人公司
  19. V3D中神经元SWC颜色对照图及色彩搭配
  20. 算法--猜字谜(哈希表优化)

热门文章

  1. maven的pom文件报错: must be pom but is jar
  2. postgres数据库的卸载
  3. 毕业论文格式自查宝典
  4. Myeclipse 主题下载
  5. 松松软文平台成立三周年寄语
  6. js 替换字符串中所有满足条件的字符
  7. Q3总营收破260亿元,长城汽车就能一路畅通?
  8. 2011年大连海洋大学会计专升本入学…
  9. Photoshop入门与进阶实例:1.10 历史记录功能
  10. 第五阶段:酷鲨商城项目——微服务