poj 3026 Borg Maze (最小生成树+bfs)
有几个错误,调试了几个小时,样例过后 1Y.
题目:http://poj.org/problem?id=3026
题意:就是让求A们和S的最小生成树
先用bfs找每两点的距离,再建树。没剪枝 63MS。
#include <iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<stack>
#include<queue>
#include<cmath>
#include<algorithm>
using namespace std; char G[][];
int dx[]={,,,-};
int dy[]={,-,,};
int r,c,bin[],an,ff[][]; //an表示边数
struct node
{
int x,y;
}e[]; //表示点 struct tree
{
int u,v,w;
}q[];//边及权值 struct point
{
int x,y,step;
}next,pos;//bfs 里的队列 void add(int u,int v,int w)//加边
{
q[an].u=u; q[an].v=v; q[an++].w=w;
} void bfs(int f,int x,int y)
{
int vis[][],i;
queue<point>qu;
memset(vis,,sizeof(vis));
next.x=x; next.y=y; next.step=;
qu.push(next);
vis[x][y]=;
while(!qu.empty())
{
pos=qu.front();
qu.pop();
for(i=; i<; i++)
{
next.x=pos.x+dx[i]; next.y=pos.y+dy[i]; next.step=pos.step+;
if(next.x>= && next.x<r && next.y>= && next.y<c && vis[next.x][next.y]== && G[next.x][next.y]!='#')
{
vis[next.x][next.y]=;
qu.push(next);
if(G[next.x][next.y]=='A'||G[next.x][next.y]=='S')
add(f,ff[next.x][next.y],next.step);
}
}
}
}
int cmp(const void *a,const void *b)
{
return (*(tree *)a).w-(*(tree *)b).w;
}
int find(int a)
{
if(a==bin[a])
return a;
else
bin[a]=find(bin[a]);
};
int main()
{
int t,cnt,i,j,x,y,num,sum;//cnt表示点的个数
char str[];
cin>>t;
while(t--)
{
sum=; num=; an=;
cin>>c>>r;
gets(str);
for(i=; i<r; i++)
gets(G[i]); cnt=;
for(i=; i<r; i++)
for(j=; j<c; j++)
if(G[i][j]=='S'||G[i][j]=='A')
{
ff[i][j]=cnt;
e[cnt].x=i; e[cnt++].y=j;
} for(i=; i<cnt; i++)
{
bfs(i,e[i].x,e[i].y);
} for(i=; i<cnt; i++)
bin[i]=i;
qsort(q,an,sizeof(q[]),cmp);
for(i=; i<=an-; i++)
{
x=find(q[i].u); y=find(q[i].v);
if(x!=y)
{
sum+=q[i].w;
num++;
bin[x]=y;
}
if(num==cnt-)
break;
}
printf("%d\n",sum);
}
}
poj 3026 Borg Maze (最小生成树+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 最小生成树 + 广搜
点击打开链接 Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7097 Accepted: 2389 ...
- 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 题目链接: http://acm.hust.edu.cn/vjudge/contest/124434#problem/I Description The Borg is an im ...
随机推荐
- php入门之表单创建和基本处理
为了方便后面学习数组,这里引入了过渡章节就是表单,至于为什么,等真的学习到数组的时候你就会发现它的妙处拉. ============================================== ...
- 字符串转换成整型数 atoi()
题目说明: 1.设计函数: int atoi(const char *nptr); 2.功能:把字符串转换成整型数,atoi()会扫描参数nptr字符串,如果第一个非空格字符存在, 是数字或者正负号则 ...
- 【转】C#路径/文件/目录/I/O常见操作汇总
文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供 ...
- butterknife7.0.1使用
1.官网:http://jakewharton.github.io/butterknife/ Introduction Annotate fields with @Bind and a view ID ...
- String类中的equals()方法
在Java中,每一个对象都有一个地址空间,在这空间保存着这个对象的值. equals 比较的是值,==比较的地址以及值. 01: public class StringExample02: {03: ...
- 1028: [JSOI2007]麻将 - BZOJ
Description 麻将是中国传统的娱乐工具之一.麻将牌的牌可以分为字牌(共有东.南.西.北.中.发.白七种)和序数牌(分为条子.饼子.万子三种花色,每种花色各有一到九的九种牌),每种牌各四张.在 ...
- MapperScannerConfigurer(转)
转:http://blog.csdn.net/ranmudaofa/article/details/8508028 原文:http://www.cnblogs.com/daxin/p/3545040. ...
- 团体程序设计天梯赛-练习集L1-016. 查验身份证
L1-016. 查验身份证 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一个合法的身份证号码由17位地区.日期编号和顺序编号 ...
- CodeForces 299B Ksusha the Squirrel
http://codeforces.com/problemset/problem/299/B 题意 :这个题挺简单的,就是说这个姑娘不喜欢走有石头的扇形,所以给你一个k的值,代表她一次可以跳多少扇形. ...
- MysqlHelper类
连接方式:server=localhost;port=3306;userid=root;password=123456789;database=mysql;persist security info= ...