bzoj1331: 魔板

来源:互联网 发布:php网页爬虫 编辑:程序博客网 时间:2024/06/05 19:59

传送门
直接大力广搜出奇迹。
不需要任何优化

#include<bits/stdc++.h>using namespace std;map<int,int> mp;int a[10],b[10],q[100005];int x,y;int cal(int *a){    int s=0;    for (int i=0;i<8;i++)        s=s*10+a[i];    return s;}void get(int x,int *a){    for (int i=7;i>=0;i--)        a[i]=x%10,x/=10; }int main(){    for (int i=0;i<8;i++)        scanf("%d",&a[i]);    x=cal(a); mp[x]=1;    int h=0,t=1; q[1]=x;    while (h!=t){        x=q[++h]; get(x,a);        memcpy(b,a,sizeof(b));        for (int i=0;i<4;i++) swap(b[i],b[7-i]);        y=cal(b);        if (!mp[y]) mp[y]=mp[x]+1,q[++t]=y;        for (int i=0;i<4;i++)            b[(i+3)%4]=a[i],b[(i+1)%4+4]=a[i+4];        y=cal(b);        if (!mp[y]) mp[y]=mp[x]+1,q[++t]=y;        memcpy(b,a,sizeof(b));        swap(b[2],b[5]); swap(b[5],b[6]); swap(b[6],b[1]);        y=cal(b);        if (!mp[y]) mp[y]=mp[x]+1,q[++t]=y;    }    for (int i=0;i<8;i++) a[i]=i+1;    printf("%d",mp[cal(a)]-1);}
原创粉丝点击