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. iframe与父页面中JS执行顺序控制

    同事遇到了一个问题: 父页面中有几个iframe,初衷是父页面的JS通过AJAX获取数据,然后用于初始化iframe页面,可以结果却是有的iframe页面却不能获得数据. [问题根源] 父页面在加载i ...

  2. c# MongoDB插入和批量插入,插入原理

    在开发之前,选择MongoDb驱动是件很重要的事情.如果选择不好,在后期的开发的是件很费力的事情,因为我就遇到这样的问题.MongoDb驱动有几种比较流行驱动,官方驱动和samus是两种使用比较多的. ...

  3. htaccess URL重写rewrite与重定向redirect(转)

    1. 将 .htm 页面映射到 .php 1 Options +FollowSymlinks 2 RewriteEngine on 3 RewriteRule ^(.*)\.htm$ $1.php [ ...

  4. TCP/IP源码(59)——TCP中的三个接收队列

    http://blog.chinaunix.net/uid-23629988-id-3482647.html TCP/IP源码(59)——TCP中的三个接收队列  作者:gfree.wind@gmai ...

  5. linux的文本管道连接处理技巧

    举例1: strace -f -e open cpp Hello.cpp -o /dev/null 2>&1 | grep -v ENOENT | awk '{print $3}' 1) ...

  6. TCP 连接的要点

    概念 TIME_WAIT: socket 仍然有数据在内核中待发送直到发送成功或超时,此socket不能被内核删除,同时等待是否要重传Ack对端还已发过来的FIN Linger Time:socket ...

  7. [转] boost------ref的使用(Boost程序库完全开发指南)读书笔记

    http://blog.csdn.net/zengraoli/article/details/9663057 STL和Boost中的算法和函数大量使用了函数对象作为判断式或谓词参数,而这些参数都是传值 ...

  8. 工厂模式[3] 抽象工厂 Abstract Factory

    简介 1.简单工厂,或静态工厂,产品接口 定义:专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类或实现同一接口 优点:客户端可以直接消费产品,而不必关心具体产品的实现(不关心对象的 ...

  9. sql plus 和 pl/sql无法连接远程oracle数据库

    前言:安装完oracle客户端后,可能会出现sql plus 和 pl/sql无法连接远程oracle数据库的情况,可能是以下原因: 针对sql plus连接不上: 1 可能原因:之前安装过oracl ...

  10. javascript 操作符类型隐性转换

    javascript 操作符类型隐性转换 (一).一元操作符只能操作一个值的操作符叫做一元操作符1.递增和递减操作符a. 在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减1的操作 ...