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. java中异常处理finally和return语句的执行顺序

    finally代码块的语句在return之前一定会得到执行 如果try块中有return语句,finally代码块没有return语句,那么try块中的return语句在返回之前会先将要返回的值保存, ...

  2. 8.3.3 快速系统调用 —— XP SP3上SystemCallStub的奇怪问题

    依书上的例子,ReadFile()函数会调用ntdll!NtReadFile(),后者将服务号放到eax之中,然后调用SharedUserData!SystemCallStub(),由此函数执行sys ...

  3. Idea maven项目不能新建package和class的解决方法

    如下图,用IDEA新建的maven项目不能新建package,class等 原因是:这里的java文件夹是普通文件夹,要设置为Sources Root.(如下图) 就可以了(见下图)

  4. c语言 预处理的使用 宏展开下的#,##

    1. #include   包含头文件 2.define 宏定义(可以理解为替换,不进行语法检查) 写法 #define 宏名 宏体  加括号 #define ABC (5+3) #define AB ...

  5. CPP-基础:关于私有成员的访问

    a.C++的类的成员函数中,允许直接访问该类的对象的私有成员变量. b.在类的成员函数中可以访问同类型实例的私有变量. c.拷贝构造函数里,可以直接访问另外一个同类对象(引用)的私有成员. d.类的成 ...

  6. CF633H Fibonacci-ish II

    题目描述 题解: 坑题搞了三天. 莫队+线段树. 还有一些和斐波那契数列有关的性质. 首先答案是$a_1f_1+a_2f_2+…+a_nf_n$, 考虑插进去一个元素对答案产生的影响. 比如插进去一个 ...

  7. SCOI2013 数数

    题目描述 题解: 很玄学的一道数位$dp$,看了很多篇题解才懂. 直接挂$l$的题解. 代码: #include<cstdio> #include<cstring> #incl ...

  8. TP框架中同时使用“or”和“and”

    今天在tp中遇到一个问题,可能这并不算难的问题,但是我还是分享一下 以下是tp手册里面查询or的方式 $User = M("User"); // 实例化User对象 $where[ ...

  9. Linux 命令学习(1): head和tail

    版权声明:本文为博主原创文章,未经允许,不得转载. head head 命令可以将一段文本的开头一部分输出到标准输出. head命令既可以处理文本文件也可以处理标准输入. 基本应用 处理文本文件: h ...

  10. 条款17:以独立语句将newed对象置入智能指针(Store newed objects in smart pointers in standalone statements)

    NOTE: 1.以独立语句将newed对象存储于智能指针内.如果不这样做,一旦异常被抛出,有可能导致难以察觉的资源泄漏.