POJ 3026 Borg Maze(Prim+BFS建邻接矩阵)
#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建邻接矩阵)的更多相关文章
- 快速切题 poj 3026 Borg Maze 最小生成树+bfs prim算法 难度:0
Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8905 Accepted: 2969 Descrip ...
- POJ 3026 Borg Maze【BFS+最小生成树】
链接: http://poj.org/problem?id=3026 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...
- POJ 3026 Borg Maze(bfs+最小生成树)
Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6634 Accepted: 2240 Descrip ...
- POJ 3026 --Borg Maze(bfs,最小生成树,英语题意题,卡格式)
Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16625 Accepted: 5383 Descri ...
- poj 3026 Borg Maze (最小生成树+bfs)
有几个错误,调试了几个小时,样例过后 1Y. 题目:http://poj.org/problem?id=3026 题意:就是让求A们和S的最小生成树 先用bfs找每两点的距离,再建树.没剪枝 63MS ...
- poj 3026 Borg Maze (BFS + Prim)
http://poj.org/problem?id=3026 Borg Maze Time Limit:1000MS Memory Limit:65536KB 64bit IO For ...
- POJ - 3026 Borg Maze BFS加最小生成树
Borg Maze 题意: 题目我一开始一直读不懂.有一个会分身的人,要在一个地图中踩到所有的A,这个人可以在出发地或者A点任意分身,问最少要走几步,这个人可以踩遍地图中所有的A点. 思路: 感觉就算 ...
- poj 3026 Borg Maze (bfs + 最小生成树)
链接:poj 3026 题意:y行x列的迷宫中,#代表阻隔墙(不可走).空格代表空位(可走).S代表搜索起点(可走),A代表目的地(可走),如今要从S出发,每次可上下左右移动一格到可走的地方.求到达全 ...
- poj 3026 Borg Maze 最小生成树 + 广搜
点击打开链接 Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7097 Accepted: 2389 ...
随机推荐
- 【多重背包】HDU 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submission(s) ...
- 安装hadoop-eclipse-plugin插件报错解决办法
安装myecplise的hadoop-eclipse-plugin-2.2.0插件的时候, 把插件放到这个文件夹里 打开myeclipse windows-->preferences 点击 H ...
- C# ObjectHelper
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- idea中建立maven web项卡在Generating Project in Batch mode
Maven命令执行到Generating Project in Batch mode 卡住,原因是网络带宽不足问题!需要下载一个约5.1M的xml文件. Maven一般命令:mvn archetype ...
- 将Cygwin Emacs设为Windows explorer默认打开程序
由于我在平日的学习与工作中会经常用到Cygwin中的Emacs,很自然地想到应该将emacsclient作为指定文件类型在Windows explorer中的默认打开程序.这样,便可以直接双击文件后在 ...
- bat脚本学习
工作需求,写个bat脚本来启动自己的守护进程:bat方面完全空白啊~稍微学习了下,记录下来,后面复习! 直接上代码: 示例一:for字符串切割,切割文本中的字符串: test.txt 文本内容如下: ...
- 将图片转换为base64 格式
1.页面上的图片,转换成base64格式,可以通过canvas 的 toDataURL 例子:给定图片的url 将图片转换为base64 var imageSrc = "../images/ ...
- 网页数据抓取(B/S)
C# 抓取网页内容(转) 1.抓取一般内容 需要三个类:WebRequest.WebResponse.StreamReader 所需命名空间:System.Net.System.IO 核心代码: We ...
- CSS Hank兼容浏览器的
color:red; /* 所有浏览器都支持 */ color:red !important; /* 除IE6外 */ _color:red; /* IE6支持 */ *color:red; /* I ...
- hdu1029
#include<iostream>#include<string.h>using namespace std;int main(){ int n,i; int t; int ...