题意:蛇形填数,然后素数处是障碍,给你起点终点,求步数;

思路:其实就是bfs,关键是将数字转换成位置比较难;

bfs其实比较简单,就是固定的思路,固定的步骤;

模板:

  1. const int dir[][] = {{-, }, {, }, {, }, {, -}};
  2. int vis[maxn], d[maxn];
  3. bool is_ok(int x, int y)///坐标是否合格,按照题意来进行
  4. {
  5. if(x< || y<||x>n||y>n)
  6. return false;
  7. return true;
  8. }
  9. int dfs(Node st,Node ed)///起点终点
  10. {
  11. queue<Node> q;
  12. q.push(st);///压进起点
  13. memset(vis,,sisteof(vis));
  14. memset(d,,sizeof(d));
  15. int ss = a[st.x][st.y];
  16. d[ss] = ;
  17. int edd = a[ed.x][ed.y];
  18. while(!q.empty())
  19. {
  20. Node c = q.front(),v;
  21. q.pop();
  22. int stt = a[c.x][c.y];
  23. if(stt == edd)///先判断是否到达终点
  24. return d[stt];
  25. repu(i,,)
  26. {
  27. v.x = c.x + dir[i][];
  28. v.y = c.y + dir[i][];
  29. if(is_ok(v.x,v.y))///坐标是否合格
  30. {
  31. int sd = a[v.x][v.y];
  32. if(!vis[sd])///符合所有条件后
  33. {
  34. q.push(v);///压进
  35. vis[sd] = ;///V过
  36. d[sd] = d[stt] + ;///步数为之前的+1
  37. }
  38. }
  39. else
  40. continue;
  41. }
  42. }
  43. return -;
  44. }

该题代码

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cmath>
  4. #include <cstring>
  5. #include <cstdlib>
  6. #include <string>
  7. #include <vector>
  8. #include <algorithm>
  9. #include<queue>
  10. #include <set>
  11. #define repu(i,a,b) for(int i=a;i<b;i++)
  12. using namespace std;
  13. #define N 1000010
  14. #define ll long long
  15. #define _cle(m, a) memset(m, a, sizeof(m))
  16. const int maxn = ;
  17. const int mn = ;
  18. int tot;
  19. int a[][];
  20. struct Node
  21. {
  22. int x, y;
  23. } nodes[maxn];
  24. void init()
  25. {
  26. memset(a, , sizeof(a));
  27. a[mn][mn] = ;
  28. tot = ;
  29. nodes[].x = mn;
  30. nodes[].y = mn;
  31. int cur = ;
  32. int i = mn, j = mn+;
  33. while(tot <= maxn)
  34. {
  35. int t;
  36. t = ;
  37. i++;
  38. while(t < cur*)
  39. {
  40. a[--i][j] = ++tot;
  41. nodes[tot].x = i;
  42. nodes[tot].y = j;
  43. t++;
  44. }
  45. t = ;
  46. while(t < cur*)
  47. {
  48. a[i][--j] = ++tot;
  49. nodes[tot].x = i;
  50. nodes[tot].y = j;
  51. t++;
  52. }
  53. t = ;
  54. while(t < cur*)
  55. {
  56. a[++i][j] = ++tot;
  57. nodes[tot].x = i;
  58. nodes[tot].y = j;
  59. t++;
  60. }
  61. t = ;
  62. while(t < cur*)
  63. {
  64. a[i][++j] = ++tot;
  65. nodes[tot].x = i;
  66. nodes[tot].y = j;
  67. t++;
  68. }
  69. ++j;
  70. cur++;
  71. }
  72. }
  73. int prime[maxn];
  74. void is_prime()
  75. {
  76. memset(prime, , sizeof(prime));
  77. int m = sqrt(maxn+0.5);
  78. prime[] = prime[] = ;
  79. for(int i = ; i <= m; i++)
  80. {
  81. if(!prime[i])
  82. {
  83. for(int j = i*i; j <= maxn; j+=i)
  84. {
  85. prime[j] = ;
  86. }
  87. }
  88. }
  89. }
  90.  
  91. const int dir[][] = {{-, }, {, }, {, }, {, -}};
  92. int vis[maxn], d[maxn];
  93. bool is_ok(int x, int y)
  94. {
  95. return x>= && y >=;
  96. }
  97. int bfs(Node z,Node b)
  98. {
  99. queue<Node> q;
  100. q.push(z);
  101. memset(vis,,sizeof(vis));
  102. memset(d,,sizeof(d));
  103. int ss = a[z.x][z.y];
  104. d[ss] = ;
  105. int ed = a[b.x][b.y];
  106. while(!q.empty())
  107. {
  108. Node c = q.front(),v;
  109. q.pop();
  110. int st = a[c.x][c.y];
  111. if(st == ed)
  112. return d[st];
  113. repu(i,,)
  114. {
  115. v.x = c.x + dir[i][];
  116. v.y = c.y + dir[i][];
  117. if(is_ok(v.x,v.y))
  118. {
  119. int sd = a[v.x][v.y];
  120. if(!vis[sd]&&prime[sd])
  121. {
  122. q.push(v);
  123. vis[sd] = ;
  124. d[sd] = d[st] + ;
  125. }
  126. }
  127. else
  128. continue;
  129. }
  130. }
  131. return -;
  132. }
  133. int main()
  134. {
  135. init();
  136. is_prime();
  137. int x, y, kase = ;
  138. while(~scanf("%d%d", &x, &y))
  139. {
  140. if(!prime[x] || !prime[y])
  141. {
  142. printf("Case %d: impossible\n", ++kase);
  143. continue;
  144. }
  145. int ans = bfs(nodes[x], nodes[y]);
  146. if(ans == -) printf("Case %d: impossible\n", ++kase);
  147. else printf("Case %d: %d\n", ++kase, ans);
  148. }
  149.  
  150. return ;
  151. }

HDU-4255 BFS 最短路的更多相关文章

  1. POJ 2251 Dungeon Master (BFS最短路)

    三维空间里BFS最短路 #include <iostream> #include <cstdio> #include <cstring> #include < ...

  2. hdu 4568 Hunter 最短路+dp

    Hunter Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  3. hdu 4531 bfs(略难)

    题目链接:点我 第一次不太清楚怎么判重,现在懂了,等下次再做 /* *HDU 4531 *BFS *注意判重 */ #include <stdio.h> #include <stri ...

  4. 【bzoj5049】[Lydsy九月月赛]导航系统 并查集+双向BFS最短路

    题目描述 给你一张 $n$ 个点 $m$ 条边的随机图,边权为1.$k$ 次询问两点间最短路,不连通则输出-1. 输入 第一行包含3个正整数n,m,k(2<=n<=100000,1< ...

  5. 【bzoj1189】[HNOI2007]紧急疏散evacuate BFS最短路+动态加边网络流

    题目描述 发生了火警,所有人员需要紧急疏散!假设每个房间是一个N M的矩形区域.每个格子如果是'.',那么表示这是一块空地:如果是'X',那么表示这是一面墙,如果是'D',那么表示这是一扇门,人们可以 ...

  6. BZOJ 1195 [HNOI2006]最短母串 (Trie图+状压+bfs最短路)

    BZOJ1195 LOJ10061 题目大意:给你$n$个模式串,求一个最短且字典序最小的文本串并输出这个串,$n<=12,len<=50$ 首先对所有模式串构造$Trie$图,$Trie ...

  7. UVa 1600 Patrol Robot (BFS最短路 && 略不一样的vis标记)

    题意 : 机器人要从一个m * n 网格的左上角(1,1) 走到右下角(m, n).网格中的一些格子是空地(用0表示),其他格子是障碍(用1表示).机器人每次可以往4个方向走一格,但不能连续地穿越k( ...

  8. BFS(最短路) HDU 2612 Find a way

    题目传送门 /* BFS:和UVA_11624差不多,本题就是分别求两个点到KFC的最短路,然后相加求最小值 */ /***************************************** ...

  9. C - 小明系列故事――捉迷藏 HDU - 4528 bfs +状压 旅游-- 最短路+状压

    C - 小明系列故事――捉迷藏 HDU - 4528 这个题目看了一下题解,感觉没有很难,应该是可以自己敲出来的,感觉自己好蠢... 这个是一个bfs 用bfs就很好写了,首先可以预处理出大明和二明能 ...

  10. HDU 1548 A strange lift (bfs / 最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1548 A strange lift Time Limit: 2000/1000 MS (Java/Ot ...

随机推荐

  1. ubuntu安装bower失败的解决方法

    1.安装nodejs 2.安装npm 3.安装bower 最开始使用 npm install bower -g / sudo npm install bower -g 安装bower后 命令行输入bo ...

  2. poj------(3468)A Simple Problem with Integers(区间更新)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 60745   ...

  3. 初始jQuery

    JQuery是继prototype之后又一个优秀的Javascript库.它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF1.5+, Safari 2.0+, Opera ...

  4. AP聚类算法(Affinity propagation Clustering Algorithm )

    AP聚类算法是基于数据点间的"信息传递"的一种聚类算法.与k-均值算法或k中心点算法不同,AP算法不需要在运行算法之前确定聚类的个数.AP算法寻找的"examplars& ...

  5. easyui datagrid导出excel

    [第十四篇]easyui datagrid导出excel   <a class="btn btn-app" onclick="exportExcel()" ...

  6. Windows 8 App: Information about CloudsCool Helper application

      Website:http://www.cloudscool.com: App download address:http://dwz.cn/7DOJm: App English introduct ...

  7. word2013设置页面边框

    如图:

  8. hdu 4612 Warm up

    http://acm.hdu.edu.cn/showproblem.php?pid=4612 将原图进行缩点 变成一个树 树上每条边都是一个桥 然后加一条边要加在树的直径两端才最优 代码: #incl ...

  9. Memcached 及 Redis 架构分析和比较

    Memcached和Redis作为两种Inmemory的key-value数据库,在设计和思想方面有着很多共通的地方,功能和应用方面在很多场合下(作为分布式缓存服务器使用等) 也很相似,在这里把两者放 ...

  10. tabbarcontroller 内嵌导航 控制器,2层push hide tabbar 后 ,第二层直接返回根视图控制器选择tabbarcontroller的其它vc 无法显示 tabbar的 问题解决方案

    场景如标题 这样不行: [self.navigationController popToRootViewControllerAnimated:YES]; MainViewController *mai ...