http://poj.org/problem?id=3026

如果一个一个普通搜处理不好的话会超时  可以连到一块搜

我觉得这个方法特别好

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #include<math.h>
  5. #include<iostream>
  6. #include<queue>
  7. #include<algorithm>
  8. #define N 105
  9. #define INF 0x3f3f3f3f
  10. using namespace std;
  11. int dis[][]={{,},{-,},{,},{,-}};
  12. int G[N][N],d[N],vis[N][N],m,n,v[N],b[N][N];
  13. char F[N][N];
  14. struct node
  15. {
  16. int x,y,temp;
  17. }a;
  18.  
  19. void Inn()
  20. {
  21. int i,j;
  22. for(i=;i<=N;i++)
  23. {
  24. d[i]=INF;
  25. for(j=;j<=N;j++)
  26. G[i][j]=INF;
  27. }
  28. memset(b,,sizeof(b));
  29. memset(F,,sizeof(F));
  30. }
  31.  
  32. void bfs(int s,int x,int y)
  33. {
  34. int i;
  35. memset(vis,,sizeof(vis));
  36. queue<node>Q;
  37. a.x=x;
  38. a.y=y;
  39. a.temp=;
  40. Q.push(a);
  41. vis[a.x][a.y]=;
  42. while(Q.size())
  43. {
  44. node q,p;
  45. q=Q.front();
  46. Q.pop();
  47. if(F[q.x][q.y]=='A' || F[q.x][q.y]=='S')
  48. G[s][b[q.x][q.y]]=q.temp;
  49. for(i=;i<;i++)
  50. {
  51. p.x=q.x+dis[i][];
  52. p.y=q.y+dis[i][];
  53.  
  54. if(F[p.x][p.y]!='#' && p.x<m&&p.y<n&&p.x>=&&p.y>=&&!vis[p.x][p.y])
  55. {
  56. p.temp=q.temp+;
  57. Q.push(p);
  58. vis[p.x][p.y]=;
  59. }
  60. }
  61. }
  62. }
  63.  
  64. int prim(int k)
  65. {
  66. memset(v,,sizeof(v));
  67. int i,j,ans=;
  68. for(i=;i<=k;i++)
  69. {
  70. d[i]=G[][i];
  71. }
  72. v[]=;
  73. for(i=;i<k;i++)
  74. {
  75. int Min=INF;
  76. int dist;
  77. for(j=;j<=k;j++)
  78. {
  79. if(!v[j] && d[j]<Min)
  80. {
  81. Min=d[j];
  82. dist=j;
  83. }
  84. }
  85. v[dist]=;
  86. ans+=Min;
  87. for(j=;j<=k;j++)
  88. {
  89. if(!v[j] && d[j]>G[dist][j])
  90. d[j]=G[dist][j];
  91. }
  92. }
  93. return ans;
  94. }
  95.  
  96. int main()
  97. {
  98. int T,i,j;
  99. scanf("%d",&T);
  100. while(T--)
  101. {
  102. scanf("%d %d ",&n,&m);
  103. Inn();
  104. int k=;
  105. for(i=;i<m;i++)
  106. {
  107. for(j=;j<n;j++)
  108. {
  109. scanf("%c",&F[i][j]);
  110. if(F[i][j]=='A' || F[i][j]=='S')
  111. {
  112. b[i][j]=k;
  113. k++;
  114. }
  115. }
  116. getchar();
  117. }
  118. for(i=;i<m;i++)
  119. {
  120. for(j=;j<n;j++)
  121. {
  122. if(F[i][j]=='A' || F[i][j]=='S')
  123. bfs(b[i][j],i,j);
  124. }
  125. }
  126. printf("%d\n",prim(k-));
  127. }
  128. return ;
  129. }

Borg Maze-POJ3026(bfs+最小生成树)的更多相关文章

  1. POJ 3026 Borg Maze(bfs+最小生成树)

    Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6634   Accepted: 2240 Descrip ...

  2. POJ 3026 Borg Maze【BFS+最小生成树】

    链接: http://poj.org/problem?id=3026 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...

  3. POJ 3026 --Borg Maze(bfs,最小生成树,英语题意题,卡格式)

    Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16625   Accepted: 5383 Descri ...

  4. POJ3026 Borg Maze(Prim)(BFS)

    Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12729   Accepted: 4153 Descri ...

  5. Borg Maze(MST & bfs)

    Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9220   Accepted: 3087 Descrip ...

  6. POJ 3026 : Borg Maze(BFS + Prim)

    http://poj.org/problem?id=3026 Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submissions ...

  7. Borg Maze(BFS+MST)

    Borg Maze http://poj.org/problem?id=3026 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions ...

  8. POJ3026——Borg Maze(BFS+最小生成树)

    Borg Maze DescriptionThe Borg is an immensely powerful race of enhanced humanoids from the delta qua ...

  9. 快速切题 poj 3026 Borg Maze 最小生成树+bfs prim算法 难度:0

    Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8905   Accepted: 2969 Descrip ...

  10. POJ3026:Borg Maze (最小生成树)

    Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18644   Accepted: 5990 题目链接:h ...

随机推荐

  1. ETH Dapp 体验报告

    Dapp 体验报告 Dapp是分散式的应用程序.DApp运行在去中心化的网络上,也就是区块链网络中.网络中不存在中心化的节点可以完整的控制DApp. 必须依赖合约部署,没有一个中心化的服务器托管. 对 ...

  2. 事件绑定、取消的二种形式 & call

    <script> //call 函数下的一个方法,call方法第一个参数可以改变函数执行过程中的内部this的指向,call方法第二个参数开始就是原来函数的参数列表. function f ...

  3. css 两列 左侧列固定 width: 100px; float: left; 右侧列自适应 margin-left:100px; 注意要用在div上的style

    css 两列 左侧列固定 width: 100px; float: left; 右侧列自适应 margin-left:100px; 注意要用在div上的style .con1{ width: 100p ...

  4. Ubuntu的防火墙配置-ufw-iptables

    自打2.4版本以后的Linux内核中, 提供了一个非常优秀的防火墙工具.这个工具可以对出入服务的网络数据进行分割.过滤.转发等等细微的控制,进而实现诸如防火墙.NAT等功能.一般来说, 我们会使用名气 ...

  5. ubuntu install zabbix

    ubuntu install zabbix reference1 reference2 some ERRORS raise during install process, may it help. z ...

  6. Java Thread.join()详解

    一.使用方式. 二.为什么要用join()方法 三.join方法的作用 join 四.用实例来理解 打印结果: 打印结果: 五.从源码看join()方法   一.使用方式. join是Thread类的 ...

  7. C++ new delete(一)

    在C#.Java這種managed語言,因為有garbage collection,所以完全不用考慮free()或delete,但在C/C++,有時候要delete的,有時又不用,到底哪些改delet ...

  8. [POJ] 3539 Elevator

    http://poj.org/problem?id=3539 给定一个电梯,可以上升a,b,c层和回到1层,给定楼高h,求可达层数 lyd讲的同余类BFS,方法是先把三个量压成两个,即把h%a,因为对 ...

  9. Jenkins出现 {"changed": false, "msg": "mkdir: cannot create directory ‘/root/.ansible/tmp/ansible-tmp-1552390265.8-253945919613076’: No space left on device\n", "unreachable": true}

    之前部署Jenkins没有遇到过这个问题,百度也找不到相关内容,无奈用过google翻译了一下,显示内存不足,上到服务器查询df -h 发现use% 100% 由于日志等文件导致服务器磁盘空间满了,引 ...

  10. python中的参数、全局变量及局部变量

    1.位置参数.关键字参数.默认参数的使用 位置参数.关键字参数 def test(x,y,z): print(x) print(y) print(z) test(1,2,3) #位置参数,必须一一对应 ...