( ̄▽ ̄)"

#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. javascript 高级程序设计1--14章重点总结

    js简介 首先介绍了js是一种专门与网页交互而设计的脚本语言.主要由ECMAScript 文档对象模型(DOM) 浏览器对象模型(BOM)三部分组成.分别用来提供核心语言,提供访问和操作网页内容的方法 ...

  2. Top 20 JavaScript Projects of 2017

    https://www.youtube.com/watch?v=SUMn8y3pi28 20. AngularJS 1 19. Passport 18. Pug 17. Socket.IO 16. J ...

  3. python 算法练习

    根据给定的线性函数来确定函数的表达形式: examples: get_function([0,1,2,3,4]) => f(x)=x get_function([1,4,7,10,13]) =& ...

  4. 在tableview的headerView中添加webView,webView自适应高度

    最近在项目中需要添加一个webView加载的页面,下面显示的是对这个webView所显示的内容的一个评论列表 ,列表要根据后台加载过来的HTML自适应的变化高度,tableview的cell在webV ...

  5. git add -f

    git add -f 添加已被 .gitignore 忽略的文件/文件夹

  6. LVM

    LVM (简体中文) pvdisplay -v -m命令查看物理分段 Create logical volume from another LV free space PVMOVE(8)

  7. java 打开浏览器 url

    public class openBrowers { public static void main(String[] args) { try { //String url = "http: ...

  8. Qt 学习笔记

    继承自QObject 的Qt类都具有支持信号和槽的能力,并且在子类的实现代码中直接使用connect()函数 pwdLineEdit->setEchoMode(QLineEdit::Passwo ...

  9. iOSAPP添加启动页

    如果你在开发过程中出现屏幕显示内容比例不正常或者显示不全的问题,你发现不是代码或者约束的问题,那么很可能是启动页没有添加或者添加不全的原因,下面配一张问题图片上下黑屏 添加启动页步骤如下图 (1) ( ...

  10. centos7 搭建elk

    CentOS 7.x安装ELK(Elasticsearch+Logstash+Kibana)  云计算 Aug 162015 第一次听到ELK,是新浪的@ARGV 介绍内部使用ELK的情况和场景,当时 ...