( ̄▽ ̄)"

#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. 快速理解Parquet的DL和RL

    关于Parquet的详细介绍,请参考: 新一代列式存储格式Parquet,此文中对Parquet做了详细的介绍,这里不做重复介绍,但其中关于Definition Level(DL)和Repeated ...

  2. 继承,多态,集合,面向对象,XML文件解析,TreeView动态加载综合练习----->网络电视精灵项目练习、分析

    网络电视精灵 项目运行状态如图: 项目完成后的类: 首先,将程序分为二部分进行: 一:TreeView节点内容的设计及编写: 1.1遍写XML文件:管理(FullChannels.xml),A类电视台 ...

  3. Redis安装(CentOS7/tar.gz)

    1. 将安装包redis-3.2.0.tar.gz上传到linux系统,位置随意. 2. 解压文件 .tar.gz 3. 解压后会在当前目录生成文件夹“redis-3.2.0”,将其拷贝到" ...

  4. 基于Unity的Profiler性能分析

    A. WaitForTargetFPS:       Vsync(垂直同步)功能所,即显示当前帧的CPU等待时间    B. Overhead:       Profiler总体时间-所有单项的记录时 ...

  5. 实现自己的JDBC框架

    使用JDBC操作数据库时,dao层的增删改查有很多重复的代码,比如下面的 public int getTotal() { Connection conn = null;//通用代码 PreparedS ...

  6. C# IIS7.0+ Web.Config 配置Session过期时间

    1. 2. 3. <sessionState mode="InProc" timeout="120"></sessionState>

  7. 妹纸UI

    感觉这个ui非常适合动态网站的构建虽然jquery很好了.但是我相信有了它会更好.http://amazeui.org/getting-started.我就加了很多在自己的项目中体验还是很不错的.可以 ...

  8. java中的反射机制_____

    一,先看一下反射的概念: 主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义. 反射是java中一种强大的工具,能够使 ...

  9. HUD 1171 Big Event in HDU(01背包)

    Big Event in HDU Problem Description Nowadays, we all know that Computer College is the biggest depa ...

  10. Python中enumerate()的使用方法

    enumerate 函数用于遍历序列中的元素以及它们的下标: >>> for i,j in enumerate(('a','b','c')): print i,j 0 a1 b2 c ...