ZOJ 3736 & HDU 4801 - Pocket Cube 打表搜索

原创 2013年12月02日 23:09:04

               题意:

                        给了一个2*2的魔方..每步操作可以将任意一面翻转90度..现在问在N(<=7)步内..最多能翻出几面相同的...

               题解:

                        开始自己打了个10行表..好难找错..然后发现..其实只要六个就行了..因为左侧正90转和右侧负90转时一样的..

                        论科学打表..自己手动裁剪一个2*2的魔方..标好号..观察一下就可以了..


Prgoram:

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <cmath>
#include <algorithm>
using namespace std;
int B[6][24]={ {6,1,12,3,5,11,16,7,8,9,4,10,18,13,14,15,20,17,22,19,0,21,2,23}, //ok
               {20,1,22,3,10,4,0,7,8,9,11,5,2,13,14,15,6,17,12,19,16,21,18,23}, //ok
               {1,3,0,2,23,22,4,5,6,7,10,11,12,13,14,15,16,17,18,19,20,21,9,8}, //ok
               {2,0,3,1,6,7,8,9,23,22,10,11,12,13,14,15,16,17,18,19,20,21,5,4}, //ok
               {0,1,8,14,4,3,7,13,17,9,10,2,6,12,16,15,5,11,18,19,20,21,22,23}, //ok
               {0,1,11,5,4,16,12,6,2,9,10,17,13,7,3,15,14,8,18,19,20,21,22,23}  //ok
              };
int ans;
void update(int *h)
{
    int sum=0;
    if (h[0]==h[1] && h[1]==h[2] && h[2]==h[3]) sum++;
    if (h[4]==h[5] && h[5]==h[10] && h[10]==h[11]) sum++;
    if (h[6]==h[7] && h[7]==h[12] && h[12]==h[13]) sum++;
    if (h[8]==h[9] && h[9]==h[14] && h[14]==h[15]) sum++;
    if (h[16]==h[17] && h[17]==h[18] && h[18]==h[19]) sum++;
    if (h[20]==h[21] && h[21]==h[22] && h[22]==h[23]) sum++;
    ans=max(ans,sum);
}
void dfs(int N,int *h)
{
    update(h);
    if (!N) return;
    int k,i,p[24];
    for (k=0;k<6;k++)
    {
           for (i=0;i<24;i++) p[i]=h[B[k][i]];
           dfs(N-1,p);
    }
    return;
}
int main()
{
    int N,i,h[24];   
    while (~scanf("%d",&N))
    {
            for (i=0;i<24;i++) scanf("%d",&h[i]);
            ans=0;
            dfs(N,h);
            printf("%d\n",ans);
    }
    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

zoj 3736 Pocket Cube(2013亚洲区域赛 长沙站 K)

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3736     Pocket Cube is a 3-D co...

ZOJ 3736 Pocket Cube

这是长沙区域赛的一道铜牌题。今天想起来才把它A了。不得不说当时长沙比赛的时候我负责写这题,然后TLE了。。。因为当时搜的是6面,而且杰恩一开始也和我说搜索6面,12^7感觉可以过的样子。然后整场比赛我...

HDU 4801 Pocket Cube BFS

一个魔方在N次操作内,能有几面相同的问题

hdu 4801 Pocket Cube

题意:给出一个 Pocket Cu

HDU 4801 Pocket Cube(模拟题——转魔方)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4801 题面: Pocket Cube Time Limit: 20000/10000...

杭电4801 PocKet Cube DFS

Pocket Cube Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

2015 Multi-University Training Contest 1 Hdu 5292 Pocket Cube

Pocket Cube Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) To...

2015 Multi-University Training Contest 1 Hdu5292 Pocket Cube

Pocket Cube Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) To...

HDU5983 Pocket Cube(模拟)

Pocket Cube Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) To...

HDU 5983 Pocket Cube (简单模拟)

大体题意: 给你一个2*2*2的魔方,问你能否一步到达各个面的颜色完全一样。 思路: 其实挺简单的,题意已经给足了提示,已经告诉你了魔方怎么进行标号。(就是那个图) 只要给魔方标号,怎么转就很...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ZOJ 3736 & HDU 4801 - Pocket Cube 打表搜索
举报原因:
原因补充:

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