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

 #include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define maxn 100
#define maxn1 100000
#include<queue>
using namespace std; char s[maxn][maxn];
const int inf=<<;
int n,m;
bool vis[maxn*][maxn*];
bool visi[maxn*];
int dis[maxn*][maxn*];
int c[maxn*][maxn*];
int dir[][]={{,},{-,},{,},{,-}};
int dist[maxn*];
int ans; struct node
{
int x,y;
int step;
}p[maxn1],st1,st; void bfs(struct node st2)
{
st2.step=;
queue<node>q;
q.push(st2);
memset(vis,false,sizeof(vis));
vis[st2.x][st2.y]=true;
while(!q.empty())
{
st1=q.front();
q.pop();
for(int i=; i<; i++)
{
int xx=st1.x+dir[i][];
int yy=st1.y+dir[i][];
if(xx>=&&xx<m&&yy>=&&yy<n&&!vis[xx][yy]&&s[xx][yy]!='#')
{
if(s[xx][yy]=='S'||s[xx][yy]=='A')
{
dis[c[st2.x][st2.y]][c[xx][yy]]=st1.step+;
st.x=xx;
st.y=yy;
st.step=st1.step+;
q.push(st);
vis[xx][yy]=true;
}
else
{
st.x=xx;
st.y=yy;
st.step=st1.step+;
q.push(st);
vis[xx][yy]=true;
}
}
}
}
} bool prime(int num)
{
memset(visi,false,sizeof(visi));
for(int i=; i<=num; i++)
{
dist[i]=inf;
}
ans=;dist[]=;
for(int i=; i<num; i++)
{
int temp=inf,k=;
for(int j=; j<num; j++)
{
if(!visi[j]&&dist[j]<temp)
{
temp=dist[j];
k=j;
}
}
if(temp==inf) return false;
visi[k]=true;
ans+=temp;
for(int j=; j<num; j++)
{
if(!visi[j]&&dist[j]>dis[k][j])
dist[j]=dis[k][j];
}
}
return true;
} int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int num=;
char s1[];
scanf("%d%d",&n,&m);
gets(s1);
memset(vis,false,sizeof(vis));
memset(c,-,sizeof(c));
for(int i=; i<m; i++)
{
gets(s[i]);
for(int j=; j<n; j++)
{
if(s[i][j]=='A'||s[i][j]=='S')
{
p[num].x=i;
p[num].y=j;
c[i][j]=num;
num++;
}
}
}
for(int i=; i<num; i++)
{
bfs(p[i]);
}
prime(num);
printf("%d\n",ans);
}
return ;
}

poj 3026Borg Maze的更多相关文章

  1. POJ 2157 Maze

    Maze Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 3183   Accepted: 996 Description A ...

  2. {POJ}{3897}{Maze Stretching}{二分答案+BFS}

    题意:给定迷宫,可以更改高度比,问如何使最短路等于输入数据. 思路:由于是单调的,可以用二分答案,然后BFS验证.这里用优先队列,每次压入也要进行检查(dis大小)防止数据过多,A*也可以.好久不写图 ...

  3. poj 3897 Maze Stretching 二分+A*搜索

    题意,给你一个l,和一个地图,让你从起点走到终点,使得路程刚好等于l. 你可以选择一个系数,把纵向的地图拉伸或收缩,比如你选择系数0.5,也就是说现在上下走一步消耗0.5的距离,如果选择系数3,也就是 ...

  4. 【bfs】 poj 3984 maze 队列存储

    #include <iostream> #include <stdio.h> #include <cstring> #define Max 0x7f7f7f7f u ...

  5. 搜索 || BFS || POJ 2157 Maze

    走迷宫拿宝藏,拿到所有对应的钥匙才能开门 *解法:从起点bfs,遇到门时先放入队列中,取出的时候看钥匙够不够决定开不开门,如果不够就把它再放回队列继续往下走,当队列里只有几个门循环的时候就可以退出,所 ...

  6. BFS广搜题目(转载)

    BFS广搜题目有时间一个个做下来 2009-12-29 15:09 1574人阅读 评论(1) 收藏 举报 图形graphc优化存储游戏 有时间要去做做这些题目,所以从他人空间copy过来了,谢谢那位 ...

  7. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

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

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

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

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

随机推荐

  1. gcc -I -L -l区别

    我们用gcc编译程序时,可能会用到“-I”(大写i),“-L”(大写l),“-l”(小写l)等参数,下面做个记录: 例: gcc -o hello hello.c -I /home/hello/inc ...

  2. 数据存储简单了解(NSUserDefaults)

    数据存储-使用NSUserDefaults 两个类介绍: NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名.密码之类的,个人觉得使用NSUserDefault ...

  3. [转] C++11带来的move语义

    PS: 通过引入接收右值的函数形参,可以通过接收右值来实现高效 PS在C++11中,标准库在<utility>中提供了一个有用的函数std::move,这个函数的名字具有迷惑性,因为实际上 ...

  4. Verilog之event的用法

    编写verilog的testbench时,可使用event变量触发事件. event变量声明为: event var; event触发为: ->var; 捕获触发为: @(var); 在mode ...

  5. codevs 1128 导弹拦截 (贪心)

    /* 题目大体意思是两套系统好多导弹 怎样分配使得两个系统所拦截的最大半径之和最小 贪心:把距离1系统最远的 让2拦截 记好距离 然后按照距离1由远到近排序 对于每一个导弹 如果这之前的都给2拦截 则 ...

  6. C#中接口和抽象类

    1抽象类 (1) 抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法 (2) 抽象类不能被实例化 (3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明 ...

  7. php5.2通过saprfc扩展远程连接sap730成功案例

    公司刚上sap系统,由于资金有限,sap与其它系统的数据交换需要公司内部实现.于是,领导决定入库申请流程需要在sap与OA系统里实现电子签核流,重担果然落到我的身上.好在我只负责OA,还一位同事负责s ...

  8. js星级评分点击星级评论打分效果--收藏--转载

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. C# - 二叉树表达式计算

    很早以前就写过双栈的表达式计算. 这次因为想深入学一下二叉树,网上都是些老掉牙的关于二叉树的基本操作. 感觉如果就学那些概念,没意思也不好记忆.于是动手写了一个表达式计算的应用例子. 这样学习印象才深 ...

  10. XML 标记使用的特殊字符对应内置实体

    下表为 XML 标记使用的字符列出了五种内置实体.   实体 实体引用 含义 lt < <(小于号) gt > >(大于号) amp & &(“and”符) a ...