紫书搜索 例题7-12 UVA
来源:互联网 发布:淘宝上婴儿面膜怎么样 编辑:程序博客网 时间:2024/04/19 14:16
题目链接:
https://vjudge.net/problem/UVA-1343
题意:
数字1,2,3都有八个,求出最少的旋转次数使得图形中间八个数相同。
旋转规则:对于每一长行或每一长列,每次旋转就是将数据向头的位置移动一位,头上的数放置到尾部。若次数相同,则找出字典序最小旋转次序。
输入是从上到下,从左向右,注意方向
题解:
代码:
#include <bits/stdc++.h>using namespace std;typedef long long ll;#define MS(a) memset(a,0,sizeof(a))#define MP make_pair#define PB push_backconst int INF = 0x3f3f3f3f;const ll INFLL = 0x3f3f3f3f3f3f3f3fLL;inline ll read(){ ll x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}//////////////////////////////////////////////////////////////////////////const int maxn = 1e5+10;int maxd,ok,a[50];char ans[maxn];int line[8][7] = { {0,2,6,11,15,20,22}, {1,3,8,12,17,21,23}, {10,9,8,7,6,5,4}, {19,18,17,16,15,14,13}};int rev[8] = {5,4,7,6,1,0,3,2}; // 通过A,B,C,D,反推其他方向。指向反向,用来还原现场。 int final[8] = {6,7,8,11,12,15,16,17}; // 最后答案要求的点 void init(){ // 反推方向 for(int i=4; i<8; i++) for(int j=0; j<=6; j++) line[i][j] = line[rev[i]][6-j];}bool is_final(){ int k = a[final[0]]; for(int i=1; i<8; i++) if(a[final[i]]!=k) return false; return true;}void move(int k){ int tmp = a[line[k][0]]; for(int i=1; i<7; i++) a[line[k][i-1]] = a[line[k][i]]; a[line[k][6]] = tmp;}int diff(int x){ int cnt = 0; for(int i=0; i<8; i++) if(x != a[final[i]]) cnt++; return cnt;}int h(){ //估值函数 return min(min(diff(1),diff(2)),diff(3));}void dfs(int cur){ if(is_final()){ ans[cur] = '\0'; cout << ans << endl; ok = 1; return ; } if(cur+h() > maxd) return ; //剪枝 for(int i=0; i<8; i++){ ans[cur] = 'A'+i; move(i); dfs(cur+1); if(ok) return ; move(rev[i]); // 还原现场 }}int main(){ init(); while(scanf("%d",&a[0]) && a[0]){ for(int i=1; i<24; i++) a[i]=read(); ok = 0; if(is_final()) puts("No moves needed"); else{ for(maxd=1; ; maxd++){ dfs(0); if(ok) break; } } cout << a[6] << endl; // 最终的颜色 } return 0;}
0 0
- 紫书搜索 例题7-12 UVA
- 紫书搜索 例题7-4 UVA
- 紫书搜索 例题7-5 UVA
- 紫书搜索 例题7-6 UVA
- 紫书搜索 例题7-9 UVA
- 紫书搜索 例题7-13 UVA
- 紫书搜索 例题7-10 UVA
- 紫书例题 10-8 Uva 1262
- 紫书例题 10-26 UVa 11440
- UVA 11464 例题7
- 紫书搜索 习题7-7 UVA
- 紫书搜索 习题7-1 UVA
- 紫书搜索 习题7-2 UVA
- 紫书搜索 习题7-3 UVA
- 紫书搜索 习题7-4 UVA
- 紫书搜索 习题7-6 UVA
- 紫书搜索 习题7-8 UVA
- 紫书搜索 习题7-10 UVA
- 抽象工厂+反射+配置文件
- 项目架构开发:服务层
- bzoj 3611: [Heoi2014]大工程 (虚树+树形DP)
- LeetCode: Reverse Integer
- 【Java学习笔记】join()方法
- 紫书搜索 例题7-12 UVA
- 正向代理与反向代理的区别【Nginx读书笔记】
- CLRS-算法导论-目录+书评
- 本地项目提交至oschina托管平台操作步骤
- 安卓开发实例(2)实现用户注册
- Oracle查询为主的命令相关偏.<重点一般在这>
- The Euler function(欧拉函数筛选)(转载)
- Vb.net调用子窗体
- android软键盘收起的同时在其他控件做另外的逻辑处理