当前位置:   article > 正文

lanqiao.125卡片换位(2016年蓝桥杯C/C++省赛C组)

lanqiao.125卡片换位(2016年蓝桥杯C/C++省赛C组)

题目:

语法点:

1. unordered_map<string,int> dist; //存储图的不同状态及不同状态对应的步数

2. unordered_map的相关操作,详细见C++中的unordered_map用法详解-CSDN博客

  1. dist.count(x) //来寻找x出现的次数
  2. dist.find(x) //来查找x是否存在
  3. //返回值是无符号数据

3. string的用法String用法详解-CSDN博客

易错点:

1. 判断范围时不要写错,不然蓝桥平台容易超时,判错

代码:

这个代码只能通过7个测试点(总共8个测试点),还有一个通过不了

  1. //lanqiao.125卡片换位
  2. //注意:cin>>不可读入空格
  3. #include<iostream>
  4. #include<cstring>
  5. #include<algorithm>
  6. #include <unordered_map> //区别
  7. #include<queue>
  8. using namespace std;
  9. //定义三个字符串,定义存储A,B位置的下标
  10. //方位
  11. unsigned int index1,index2;
  12. string str1,str2,s;
  13. int dx[]={0,-1,0,1},dy[]={-1,0,1,0};
  14. unordered_map<string,int> dist; //存储图的不同状态及不同状态对应的步数
  15. int bfs()
  16. {
  17. //定义队列
  18. //初始化(这里不用):坐标,路径,标记【看情况而定】
  19. //push一开始的状态
  20. queue<string> q;
  21. dist[s]=0; //初始步数为0
  22. q.push(s);
  23. /*bfs主要部分:
  24. while(!q.empty())
  25. {
  26. 1.初始进队列
  27. 1.递归出口;
  28. 2. 主要部分:
  29. 找到空格位置
  30. 一维度转二维
  31. 位置步数记录
  32. for()变换方位
  33. {
  34. 越界判断if()
  35. 交换
  36. if()
  37. 放入新队列
  38. 步数加1
  39. 换回来
  40. }
  41. }
  42. */
  43. while(!q.empty())
  44. {
  45. string t=q.front();
  46. q.pop();
  47. if(t.find('A')==index2&&t.find('B')==index1)
  48. {
  49. /* cout<<dist[t];
  50. break; */
  51. return dist[t];
  52. }
  53. int k=t.find(' ');
  54. int x=k/3,y=k%3;
  55. long long distance=dist[t];
  56. for(int i=0;i<4;i++)
  57. {
  58. int nx=x+dx[i],ny=y+dy[i];
  59. if(nx<0||nx>1||ny<0||ny>2)
  60. {
  61. continue;
  62. }
  63. swap(t[k],t[nx*3+ny]); //nx*3+ny是把一维转成二维
  64. if(!dist.count(t))
  65. {
  66. q.push(t);
  67. dist[t]=distance+1;
  68. }
  69. swap(t[k],t[nx*3+ny]);
  70. }
  71. }
  72. return -1;
  73. }
  74. int main()
  75. {
  76. getline(cin,str1);
  77. getline(cin,str2);
  78. s=str1+str2;
  79. index1=s.find('A');
  80. index2=s.find('B');
  81. cout << bfs();
  82. return 0;
  83. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/397849
推荐阅读
相关标签
  

闽ICP备14008679号