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. 转载:Ununtu下中文乱码解决方案

    转载: 添加中文字符编码: $sudo vim /var/lib/locales/supported.d/local #添加下面的中文字符集 zh_CN.GBK GBK zh_CN.GB2312 GB ...

  2. appium点击屏幕(手势)

    在android测试过程中,会遇到要点击一下屏幕的需求. 在appium旧版本使用下面代码点击android屏幕,没有报错.Map tap = new HashMap(); tap.put(" ...

  3. Android自定义Toast宽度无法设置问题解决

    在项目中想要实现一个头部的toast提示效果,类似下图  再实现的过程中发现,如果直接通过修改Toast的View布局的父控件宽度是无法实现效果的,后来是通过直接用代码指定父控件内部的textview ...

  4. CSRF——攻击与防御

    CSRF——攻击与防御 author: lake2 0x01 什么是CSRF攻击 CSRF是Cross Site Request Forgery的缩写(也缩写为XSRF),直译过来就是跨站请求伪造的意 ...

  5. 解决java.sql.SQLException: Parameter number X is not an OUT parameter--转

    最近独自一个人写项目,孤军奋战的程序猿可真伤不起! Java 调用MYSQL带输入输出参数存储过程时如题错误:java.sql.SQLException: Parameter number X is ...

  6. const中的一些tricky的地方

    1. 为了逻辑上的优化需要,const成员函数可能想修改某些成员变量,把这些成员变量定义为mutable可以绕过const的检查 2. 调用const和non-const的参数的函数可以重载 3. s ...

  7. mui.pushToRefresh组件下拉回调函数中this指向问题

    先看一段代码 (function($) { //阻尼系数 var deceleration = mui.os.ios ? 0.003 : 0.0009; $('.mui-scroll-wrapper' ...

  8. JavaScript设计模式之观察者模式(学习笔记)

    设计模式(Design Pattern)对于软件开发来说其重要性不言而喻,代码可复用.可维护.可扩展一直都是软件工程中的追求!对于我一个学javascript的人来说,理解设计模式似乎有些困难,对仅切 ...

  9. mybatis审查要点

    1.where条件遗漏情况 <select id="findActiveBlogLike" resultType="Blog"> SELECT * ...

  10. SVN 不能提交, 看不到日志, 出现乱码. 解决方案.

    需要工具 sprite3: 点这里下载. 解决问题 如本文标题所写. 我遇到过几次一样的问题, 每次都很蛋疼的把目录重新检出, 浪费时间, 又伤了脾气. 下面是我在百度经验找到的一片帖子, 效果杠杠的 ...