( ̄▽ ̄)"

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std; const int INF=10e8;
const int MAXN=55;
int col,row,k,minn;
char str[MAXN][MAXN];
int maze[MAXN][MAXN],dist[MAXN*2][MAXN*2],lowdis[MAXN*2];
int dx[]={-1,0,0,1};
int dy[]={0,-1,1,0};
bool vist[MAXN][MAXN]; //BFS时记录是否走过
bool vis[MAXN*2]; struct Node
{
int x,y;
int dis;
}node[MAXN*2]; bool judge(int x,int y)
{//判断是否过界,或者是否能继续查下去
if(x<0||x>=row||y<0||y>=col||maze[x][y]==-1||vist[x][y]==1)
return false;
return true;
} void BFS(int n)//用bfs建立邻接矩阵
{
queue<Node> que; //que为Node型的队列变量
memset(dist,0,sizeof(dist));
Node u,next; //u用来保存当前的队列元素,next保存下一个队列元素 for(int i=1;i<=n;i++)
{
while(!que.empty())
que.pop(); //清空队列元素
memset(vist,0,sizeof(vist));
int tot=0;
node[i].dis=0;
vist[node[i].x][node[i].y]=1;
que.push(node[i]); while(!que.empty())
{
u=que.front();que.pop();
int x=u.x,y=u.y;
if(maze[x][y]!=0&&maze[x][y]!=-1)
{
tot++;
dist[i][maze[x][y]]=dist[maze[x][y]][i]=u.dis;
if(tot==n) break;
} for(int j=0;j<4;j++) //从u点的四个方向上查找
{
int xx=u.x+dx[j],yy=u.y+dy[j];
if(judge(xx,yy))
{
next.x=xx;next.y=yy;
next.dis=u.dis+1;
vist[xx][yy]=1;
que.push(next);
}
}
}
}
} int Prim(int n)
{
int ans=0;
memset(vis,0,sizeof(vis));
vis[1]=1; for(int i=1;i<=n;i++)
lowdis[i]=dist[1][i];
for(int i=1;i<=n-1;i++)
{
minn=INF;k=-1;
for(int j=1;j<=n;j++)
{
if(!vis[j]&&minn>lowdis[j])
{
minn=lowdis[j];
k=j;
}
}
if(k==-1) break;
ans+=minn;vis[k]=1;
for(int j=1;j<=n;j++)
if(!vis[j]&&lowdis[j]>dist[k][j])
lowdis[j]=dist[k][j];
}
return ans;
} int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int cnt=0;
memset(node,0,sizeof(node));
scanf("%d%d",&col,&row);
char ch[MAXN];
gets(ch);//重点!处理输入时多余的空格
for(int i=0;i<row;i++)
{
gets(str[i]);
for(int j=0;j<col;j++)
if(str[i][j]=='A'||str[i][j]=='S')
{
cnt++;
maze[i][j]=cnt;
node[cnt].x=i,node[cnt].y=j;
}
else if(str[i][j]==' ')
maze[i][j]=0;
else if(str[i][j]=='#')
maze[i][j]=-1;
}
BFS(cnt);
printf("%d\n",Prim(cnt));
}
return 0;
}

POJ 3026 Borg Maze(Prim+BFS建邻接矩阵)的更多相关文章

  1. 快速切题 poj 3026 Borg Maze 最小生成树+bfs prim算法 难度:0

    Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8905   Accepted: 2969 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: 6634   Accepted: 2240 Descrip ...

  4. POJ 3026 --Borg Maze(bfs,最小生成树,英语题意题,卡格式)

    Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16625   Accepted: 5383 Descri ...

  5. poj 3026 Borg Maze (最小生成树+bfs)

    有几个错误,调试了几个小时,样例过后 1Y. 题目:http://poj.org/problem?id=3026 题意:就是让求A们和S的最小生成树 先用bfs找每两点的距离,再建树.没剪枝 63MS ...

  6. poj 3026 Borg Maze (BFS + Prim)

    http://poj.org/problem?id=3026 Borg Maze Time Limit:1000MS     Memory Limit:65536KB     64bit IO For ...

  7. POJ - 3026 Borg Maze BFS加最小生成树

    Borg Maze 题意: 题目我一开始一直读不懂.有一个会分身的人,要在一个地图中踩到所有的A,这个人可以在出发地或者A点任意分身,问最少要走几步,这个人可以踩遍地图中所有的A点. 思路: 感觉就算 ...

  8. poj 3026 Borg Maze (bfs + 最小生成树)

    链接:poj 3026 题意:y行x列的迷宫中,#代表阻隔墙(不可走).空格代表空位(可走).S代表搜索起点(可走),A代表目的地(可走),如今要从S出发,每次可上下左右移动一格到可走的地方.求到达全 ...

  9. poj 3026 Borg Maze 最小生成树 + 广搜

    点击打开链接 Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7097   Accepted: 2389 ...

随机推荐

  1. Smail语法

    1.数据类型 2.函数: Func-Name (Para-Type1Para-Type2Para-Type3...)Return-Type 注意参数与参数之间没有任何分隔符 3.函数调用: 4.关于s ...

  2. CentOS6.5自带Python2.6.6升级至Python2.7

    CentOS6.5中Python2.6升级到Python2.7 由于Python开发团队已不再支持2.6版本,且该版本对一些软件不支持,因此将2.6升级到2.7. 1.安装Python2.7: 下载源 ...

  3. SAP HANA procudure 创建用户

    SAP HANA中的用户是没有功能进行直接的拷贝的,但是我们可以通过建立存储过程调用,通过sql语句的方式进行拷贝: 存储过程定义如下,各位可根据自己的需求进行修改: CREATE PROCEDURE ...

  4. 邂逅python

    你很美 幸运遇见你 很幸运,能在现在这么多繁杂的语言中选择python.初识python是在2016年的七月.大二学期刚刚结束,留在学校准备学点东西.刚好听同学说下学期要学习python,所以决定要学 ...

  5. 安卓平台多个视频叠加演示demo说明

    多个音视频编辑演示说明: 第一个-----字幕和视频的叠加: 说明: 把字幕文件中的文字,按照时间叠加到视频上去,形成新的视频. 类似我们看电影时的字幕. 下载地址:http://www.cnblog ...

  6. Unity3D脚本使用:Time

    1.Time 使用方式 使用效果 2.yield 延迟执行    嵌套延迟   

  7. Redis 数据序列化方法 serialize, msgpack, json, hprose 比较

    最近弄 Redis ,涉及数据序列化存储的问题,对比了:JSON, Serialize, Msgpack, Hprose 四种方式 1. 对序列化后的字符串长度对比: 测试代码: $arr = [0, ...

  8. CodeForces 670F Restore a Number

    模拟. 首先暴力找到答案的位数,然后就是分类讨论输出答案. #pragma comment(linker, "/STACK:1024000000,1024000000") #inc ...

  9. 子查询 此处该用AND 而不是 WHERE

    条件:有一张账户表,一张订单表. 需求:求出所有role = 2 即客服人员,所有操作成功的订单数量.结果:能查出所有的客服人员名称,以及操作的订单数量(关键点在于,没有操作过订单,则数量显示为0) ...

  10. [SOJ] 商人的宣传

    Description Bruce是K国的商人,他在A州成立了自己的公司,这次他的公司生产出了一批性能很好的产品,准备宣传活动开始后的第L天到达B州进行新品拍卖,期间Bruce打算将产品拿到各个州去做 ...