hdu 4801 Pocket Cube 四面魔方,模拟+搜索
来源:互联网 发布:外国人吃西洋参吗 知乎 编辑:程序博客网 时间:2024/05/17 08:16
魔方只有4面,且深度只有7层,所以可以搜索解决。由于模拟过程复杂,干脆用一个辅助数组记录每次转动每个点的对应位置,在脑中空间想象一下就好了。
值得注意的一点是不需要模拟12次(6条边,顺+逆2次)因为一条边顺时针就相当于另一条边逆时针,所以只需要6次就好。
#include <iostream>#include <cstring>#include <string>#include <cstdio>#include <cmath>#include <algorithm>#include <vector>#include <map>#define inf 0x3f3f3f3fusing namespace std;int ans;int n;int a[24];void debug(){ printf(" %3d%3d\n",a[0],a[1]); printf(" %3d%3d\n",a[2],a[3]); for(int i=4;i<=9;i++) printf("%3d",a[i]); puts(""); for(int i=10;i<=15;i++) printf("%3d",a[i]); puts(""); for(int j=0;j<=3;j++) printf(" %3d%3d\n",a[16+j*2],a[16+j*2+1]); puts("---------------");}int h[10][24]={ {1,3,0,2,23,22,4,5,6,7,10,11,12,13,14,15,16,17,18,19,20,21,9,8}, {2,0,3,1,6,7,8,9,23,22,10,11,12,13,14,15,16,17,18,19,20,21,5,4}, {0,1,8,14,4,3,7,13,17,9,10,2,6,12,16,15,5,11,18,19,20,21,22,23}, {0,1,11,5,4,16,12,6,2,9,10,17,13,7,3,15,14,8,18,19,20,21,22,23}, {20,1,22,3,10,4,0,7,8,9,11,5,2,13,14,15,6,17,12,19,16,21,18,23}, {6,1,12,3,5,11,16,7,8,9,4,10,18,13,14,15,20,17,22,19,0,21,2,23},};int f(int x,int b,int c,int d){ return a[x]==a[b]&&a[b]==a[c]&&a[c]==a[d];}int cal(){ return f(0,1,2,3)+f(4,5,10,11)+f(6,7,12,13)+f(8,9,14,15)+f(16,17,18,19)+f(20,21,22,23);}void dfs(int last){ ans=max(ans,cal()); if(ans==6) return; if(!last) return; int tmp[24]; memcpy(tmp,a,sizeof(a)); for(int d=0;d<6;d++) { for(int i=0;i<24;i++) a[i]=tmp[h[d][i]]; dfs(last-1); memcpy(a,tmp,sizeof(tmp)); }}int main(){ while(~scanf("%d",&n)) { for(int i=0;i<24;i++) { scanf("%d",&a[i]); } ans=cal(); dfs(n); printf("%d\n",ans); } return 0;}
4 0
- hdu 4801 Pocket Cube 四面魔方,模拟+搜索
- HDU 4801 Pocket Cube(模拟题——转魔方)
- hdu 4801 Pocket Cube(dfs+模拟)
- [模拟]HDU 5983 Pocket Cube
- hdu 5983 Pocket Cube(模拟)
- 【HDU 5983 Pocket Cube】& 模拟
- HDU 5983 Pocket Cube 模拟
- HDU 5983 Pocket Cube (模拟)
- hdu 4801 Pocket Cube
- HDU 4801 Pocket Cube
- HDU 4801 2013 Changsha Regional Pocket Cube[大模拟]
- HDU 4801 Pocket Cube(暴力模拟 dfs)
- ZOJ 3736 & HDU 4801 - Pocket Cube 打表搜索
- HDU 5983-Pocket Cube(一步还原二阶魔方)
- HDU 5983 Pocket Cube (简单模拟)
- hdu 5983 Pocket Cube (模拟)
- HDU 4801 Pocket Cube BFS
- HDU 4801 Pocket Cube bfs
- [ACM] hdu 1398 Square Coins (母函数)
- Log4J基础详解及示例大全
- 减少GPU应用中的分支方法[1]
- POJ 1419 最大团问题
- 树莓派设置固定ip
- hdu 4801 Pocket Cube 四面魔方,模拟+搜索
- Java实现随机验证码功能实例
- poj 1651 区间DP
- Myeclipse配置tomcat服务器
- 如何在mysql数据库中插入中文数据
- 9.3 客户端
- C语言中基本整型数据类型
- 自动登录、记住我(保存登陆状态)实现
- 第三章作业