九度OJ 清华12真题之广度优先搜索之《玛雅密码》
来源:互联网 发布:好八字是什么 知乎 编辑:程序博客网 时间:2024/05/18 02:32
题目地址:http://ac.jobdu.com/problem.php?pid=1482
#include<stdio.h>#include<string.h>#include<queue>#define MAXS 20using namespace std;bool mark[1594330];int mark2[3];int l,n;typedef struct E{int h[MAXS];int num;//映射成三进制的十进制以便harshint count;//记录转换次数void change()//转换成三进制数- -!{num=0;int i,j;for(i=0,j=1;i<n;i++,j*=3)num+=h[i]*j;}}E;E a,temp;queue < E > Q;bool check(E x){int i;for(i=0;i<n;i++)//因为数组后面全是0。所以判定条件不用i<n-3。因为到最后必然false。{if(x.h[i]==2&&x.h[i+1]==0&&x.h[i+2]==1&&x.h[i+3]==2)return true;}return false;}int main(){int i,j,ans;//ans记录一共的次数char temph[MAXS];while(~scanf("%d",&n)){mark2[0]=mark2[1]=mark2[2]=ans=0;memset(mark,0,sizeof(mark));memset(&a,0,sizeof(a));while(Q.empty()==false)Q.pop();getchar();scanf("%s",temph);for(i=0;i<n;i++){a.h[i]=temph[i]-'0';mark2[a.h[i]]++;}if(mark2[2]<2||mark2[0]<1||mark2[1]<1){printf("-1\n");continue;}a.change();mark[a.num]=true;a.count=0;Q.push(a);if(check(a)){printf("0\n");continue;}while(!ans){a=Q.front();Q.pop();a.count++;for(i=1;i<n;i++)//i标记需要交换的数的后面那个位置{temp=a;int tempi=temp.h[i];//交换这俩值temp.h[i]=temp.h[i-1];temp.h[i-1]=tempi;temp.change();if(check(temp)==true){ans=temp.count;break;}if(mark[temp.num])continue;mark[temp.num]=true;Q.push(temp);}}printf("%d\n",ans);}return 0;}
- 九度OJ 清华12真题之广度优先搜索之《玛雅密码》
- 九度OJ 教程86 广度优先搜索解决迷宫问题之《胜利大逃亡》
- 九度OJ 教程87 广度优先搜索之《非常可乐》
- 九度OJ 1079 清华真题——字符串处理之《手机键盘》
- 九度OJ 1035 09浙大真题之优先队列堆排序之《寻找大富翁》
- 迷宫之广度优先搜索
- 图之广度优先搜索
- 算法之广度优先搜索
- 九度OJ 1063 清华机试之整数和。
- 图算法之广度优先搜索
- 图的遍历 之 广度优先搜索
- 图遍历之广度优先搜索
- 数据结构之图的广度优先搜索
- 广度优先搜索之宝岛探险
- 图的遍历之广度优先搜索
- 广度优先搜索之最短路径
- 基本图算法之广度优先搜索
- 广度优先搜索之最大杀敌数
- VTK的三维模型保存、读取之保存为vtk格式
- iOS实现截屏 并合适保存
- [转载]获取html绝对坐标 屏蔽Ctrl+V 按回车键直接登录 js代码 .
- JavaScript中关于绑定事件句柄问题
- 净(负)荷概念,osi封装
- 九度OJ 清华12真题之广度优先搜索之《玛雅密码》
- 协同过滤介绍和简单推荐系统的实现
- linux minicom配置
- 自动取款机
- Android新手入门实例之Android漂亮时钟的源代码
- http transaction session
- SQL 优化34条建议
- js监听键盘动作 .
- Java容器的线程安全