热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【BFS】bzoj1054[HAOI2008]移动玩具

暴搜吧,可以哈希一下,但是懒得写哈希了,所以慢得要死。Code:1#include<cstdio>2#include<queue>3#includ

暴搜吧,可以哈希一下,但是懒得写哈希了,所以慢得要死。

Code:

 1 #include
 2 #include
 3 #include<set>
 4 #include
 5 using namespace std;
 6 const int di[]={0,0,-1,1},dj[]={-1,1,0,0};
 7 struct Squ{char S[4][4];};
 8 struct Node{Squ v;int d;Node(const Squ &a,const int &b){v=a;d=b;}Node(){}};
 9 bool operator <(const Squ &a,const Squ &b)
10 {
11     for(int i=0;i<4;i++)
12       for(int j=0;j<4;j++)
13         if(a.S[i][j]<b.S[i][j])
14           return true;
15         else if(a.S[i][j]>b.S[i][j])
16           return false;
17     return false;
18 }
19 bool operator == (const Squ &a,const Squ &b)
20 {
21     for(int i=0;i<4;i++)
22       for(int j=0;j<4;j++)
23         if(a.S[i][j]!=b.S[i][j])
24           return false;
25     return true;
26 }
27 Squ from,to;
28 setSet;
29 queueq;
30 inline bool check(const int &x,const int &y)
31 {
32     if(x>=0&&x<4&&y>=0&&y<4&&q.front().v.S[x][y]=='0')
33       return true;
34     return false;
35 }
36 inline void work(const Squ &tmp)
37 {
38     if(Set.find(tmp)==Set.end())
39       {
40           if(tmp==to)
41             {
42                 printf("%d\n",q.front().d+1);
43                 exit(0);
44             }
45           Set.insert(tmp);
46           q.push(Node(tmp,q.front().d+1));
47       }
48 }
49 int main()
50 {
51     for(int i=0;i<4;i++)scanf("%s",from.S[i]);
52     for(int i=0;i<4;i++)scanf("%s",to.S[i]);
53     if(from==to){printf("0\n");return 0;}
54     q.push(Node(from,0));
55     Set.insert(from);
56     while(!q.empty())
57       {
58           for(int i=0;i<4;i++)
59             for(int j=0;j<4;j++)
60               if(q.front().v.S[i][j]=='1')
61                 {
62                     for(int k=0;k<4;k++)
63                       {
64                           int ti=i+di[k],tj=j+dj[k];
65                           if(check(ti,tj))
66                             {
67                                 Squ tmp=q.front().v;
68                                 swap(tmp.S[i][j],tmp.S[ti][tj]);
69                                 work(tmp);
70                             }
71                       }
72                 }
73           q.pop();
74       }
75     return 0;
76 }

 


推荐阅读
  • 寒假作业解析:第三周 2月12日 第7题
    尽快完成之前的练习任务!每日一练2.1 Problem A Laurenty and Shop 的题目要求是选择两条不同的路线以最小化总的等待时间。简要分析:通过对比不同路线的等待时间,可以找到最优解。此问题可以通过动态规划或贪心算法来解决,具体取决于路线的复杂性和约束条件。 ... [详细]
  • 在洛谷 P1344 的坏牛奶追踪问题中,第一问要求计算最小割,而第二问则需要找到割边数量最少的最小割。通过为每条边附加一个单位权值,可以在求解最小割时优先选择边数较少的方案,从而同时解决两个问题。这种策略不仅简化了问题的求解过程,还确保了结果的最优性。 ... [详细]
  • 单链表的高效遍历及性能优化策略
    本文探讨了单链表的高效遍历方法及其性能优化策略。在单链表的数据结构中,插入操作的时间复杂度为O(n),而遍历操作的时间复杂度为O(n^2)。通过在 `LinkList.h` 和 `main.cpp` 文件中对单链表进行封装,我们实现了创建和销毁功能的优化,提高了单链表的使用效率。此外,文章还介绍了几种常见的优化技术,如缓存节点指针和批量处理,以进一步提升遍历性能。 ... [详细]
  • 手指触控|Android电容屏幕驱动调试指南
    手指触控|Android电容屏幕驱动调试指南 ... [详细]
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • 本文对常见的字符串哈希函数进行了全面分析,涵盖了BKDRHash、APHash、DJBHash、JSHash、RSHash、SDBMHash、PJWHash和ELFHash等多种算法。这些哈希函数在不同的应用场景中表现出各异的性能特点,通过对比其算法原理、计算效率和碰撞概率,为实际应用提供了有价值的参考。 ... [详细]
  • SRM 553:深入解析供应链管理系统的最新进展与应用本文详细探讨了供应链管理系统(SCM)的最新发展及其在实际应用中的影响。通过对当前技术趋势的分析,文章揭示了 SCM 在提高效率、降低成本和增强透明度方面的关键作用。此外,还介绍了几种创新的 SCM 解决方案,如区块链技术和人工智能的应用,以及这些技术如何帮助企业更好地应对市场变化和挑战。 ... [详细]
  • 哈希表(Hash Table)是一种高效的查找算法,与传统的链表和树结构相比,其在查找过程中无需进行逐个元素的比较。本文将深入探讨哈希表的基本原理、应用场景以及优化策略,帮助读者全面理解其在实际开发中的优势和局限性。通过实例分析和代码示例,我们将展示如何有效利用哈希表提高数据处理效率,并解决常见的冲突问题。 ... [详细]
  • 题目链接:http://codeforces.com/gym/101190/attachments题意:在一个共享三轮车站点,某些用户需要租用车辆。该问题涉及如何通过离线查询和排序优化策略来高效地管理和分配车辆资源。具体来说,需要设计一种算法,在满足所有用户需求的同时,最小化总等待时间和资源浪费。通过合理的数据结构和算法优化,可以显著提高系统的整体性能和用户体验。 ... [详细]
  • 在探讨P1923问题时,我们发现手写的快速排序在最后两个测试用例中出现了超时现象,这在意料之中,因为该题目实际上要求的是时间复杂度为O(n)的算法。进一步研究题解后,发现有选手使用STL中的`nth_element`函数成功通过了所有测试点。本文将详细分析这一现象,并提出相应的优化策略。 ... [详细]
  • 本文介绍了如何在iOS平台上使用GLSL着色器将YV12格式的视频帧数据转换为RGB格式,并展示了转换后的图像效果。通过详细的技术实现步骤和代码示例,读者可以轻松掌握这一过程,适用于需要进行视频处理的应用开发。 ... [详细]
  • 在编程笔试和面试中,全排列算法因其适中的难度而备受青睐,不仅能够考察应聘者的算法基础,还能测试其对递归和回溯的理解。本文将深入解析全排列算法的实现原理,探讨其应用场景,并提供优化建议,帮助读者更好地掌握这一重要算法。 ... [详细]
  • 蓝桥杯算法实战:节点选取策略优化分析
    本文针对蓝桥杯算法竞赛中的节点选取策略进行了深入分析与优化。通过对比不同节点选择方法的效果,提出了基于贪心算法和动态规划的综合优化方案,旨在提高算法效率和准确性。实验结果表明,该优化策略在处理大规模数据集时表现出色,显著提升了算法性能。 ... [详细]
  • 2014年3月16日 长沙多所高校联合举办第三次学术交流活动
    2014年3月16日,长沙多所高校联合举办了第三次学术交流活动。此次活动旨在促进各高校间的学术合作与交流,吸引了众多师生参与。交流内容涵盖了计算机科学、工程技术等多个领域,为参会者提供了丰富的学习和讨论机会。 ... [详细]
  • 在解决区间相关问题时,我发现自己经常缺乏有效的思维方式,即使是简单的题目也常常需要很长时间才能找到解题思路,而一旦得到提示便能迅速理解。题目要求对一个包含n个元素的数组进行操作,并给出一个参数k,具体任务是…… ... [详细]
author-avatar
____洋果子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有