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. 最常用的Eclipse快捷键【转载】

    本文是一些最实用.最齐全.最省时间的 Eclipse 快捷键总结,这些快捷键可以让帮助你完成工作中的任何一个操作.欢迎参考. 1. ctrl+shift+r:打开资源 这可能是所有快捷键组合中最省时间 ...

  2. JSP中的路径

    我的原则 所有路径一律使用绝对路径,就是以"/"开头的或者带host的路径.形如: /imgs/1.jpg <%= request.getContextPath()%> ...

  3. Swift3.0 更新后出现比较运算符方法

    在将项目更新到swift3.0之后,在一些controller头部会出现 比较运算符的方法 // FIXME: comparison operators with optionals were rem ...

  4. Hadoop与HBase中遇到的问题

    1. Hadoop中遇到的问题 曾经所遇到的问题因为没有记录,所以忘了 (1)NameNode没有启动成功, 是因为你对HDFS多次格式化,导致datanode中与namenode中的VERSION文 ...

  5. 排序(5)---------高速排序(C语言实现)

    继shell发明了shell排序过后呢,各位计算机界的大牛们又開始不爽了,为什么他能发明.我就不能发明呢.于是又有个哥们蹦出来了.哎...那么多排序,就木有一个排序是中国人发明的.顺便吐槽一下,一百年 ...

  6. 缓冲运动-1-[解决1].html

    <!DOCTYPE html> <html> <head lang="en">     <meta charset="UTF-8 ...

  7. axf、elf文件转换成bin、hex脚本工具

    在嵌入式开发过程中常常遇到将axf或elf文件转换成bin的情况,大家都知道通过gnu toolchain中的objcopy和keil中的fromelf能做到.可是为了这么一个小事而记住复杂的选项以及 ...

  8. cocos2d疑问

    1. pushScene后,如果才能保持前一个Scene的所有动作,比如schedule 2. APP进入到背景模式运行时,如何让它仍然做一些工作?

  9. 在/etc/password用户名前面加hello,ID前加is

    方法2: #!/bin/sh #set -x file=/etc/passwd while read LINE #for i in `cat $file` do #username=`echo $i| ...

  10. Sublime Text3使用详解

    Sublime Text简介 Sublime Text - 性感的代码编辑器.程序员之必备神器 Sublime Text 是一个代码编辑器,也是HTML和散文先进的文本编辑器.Sublime Text ...