搜索 J
来源:互联网 发布:淘宝生鲜都发空运吗 编辑:程序博客网 时间:2024/05/28 04:55
这到题的基本题意为给你两堆已知序列的扑克牌,在给你一堆要求顺序扑克牌,问这两堆扑克牌交叉洗牌能否产生要求序列的扑克牌,若可能生成的话,则输出最小的操作数,如果不可以的话,则输出-1。
这道题为一道BFS,每次洗牌有两张情况,将每次洗牌的两种情况分别与要求的序列比较,直到产生要求
的队列或循环到原来的两堆扑克牌为止。
源代码如下:
#include<iostream>#include<stdio.h> #include<string.h> const int MAXN=110; int search(); char s1[MAXN],s2[MAXN],s12[MAXN+MAXN]; int tot,c,c12; int main() { int i,n; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&c); scanf("%s%s%s",s1,s2,s12); c12=2*c; tot=search(); printf("%d %d\n",i,tot?tot:-1); } return 0; } int search() { tot=0; int i,j,k; char s1t[MAXN],s2t[MAXN],s12t[MAXN+MAXN]; strcpy(s1t,s1),strcpy(s2t,s2); while(1) { for(i=0,j=0,k=0;k<c12;k++){ if(k%2)s12t[k]=s1t[j++]; else s12t[k]=s2t[i++]; } s12t[k]='\0'; tot++; if(!strcmp(s12,s12t))return tot; for(i=0;i<c;i++) s1t[i]=s12t[i]; s1t[i]='\0'; for(i=0;i<c;i++) s2t[i]=s12t[i+c]; s2t[i]='\0'; if(!strcmp(s1,s1t)&&(!strcmp(s2,s2t)))return 0;} return 0; }
阅读全文
0 0
- 搜索 J
- 搜索专题 J
- 搜索练习题J-10
- 搜索 J题
- CodeForces 44J - Triminoes -搜索转构造
- Gym - 100625J Jailbreak 最短路+搜索
- CodeForces #589 J Cleaner Robot 搜索
- 【搜索入门专题1】 hdu1242 J
- kuangbin 简单搜索 J 双bfs
- J
- j
- j
- J#
- J
- J
- J
- J
- j
- STL库学习 参考大道至简(更新完毕)
- CyclicBarrier
- javascript:touch事件
- 持久化存储技术之SharedPreferences存储
- D3 GEO应用专题(一):绘制旋转的3D地球
- 搜索 J
- 第二十二天 http状态管理技术-cookies和session
- 机器学习adaboost实现
- 2017年河南省ACM省赛 Problem F: Binary to Prime
- C# Winform Chart控件使用
- 【集合类分析】LinkedHashMap
- Special equations ----(hdu4569)数学思维
- Spring MVC 学习手记(2)- @RequestMapping注解
- 编译安装mysql