POJ 3206 最小生成树
DESCRIPTION:
T_T 在下是读不懂题意的。但是捏。现在知道是求把所有的点(是字母的点)连起来的最小的权值。即最小生成树。因为求最小生成树是不计较源点是哪个的。所以可以把A和S看成一样的。首先需要用BFS广搜算法求出任意两点之间的最短距离。然后直接用prim或kruskal算法模板就欧克了。但是捏。貌似这道题有两大坑。NO.1 输入row 和 col 两个数之后会有多余的空格。所以需要吃掉一个字符串而不是一个字符。NO.2 虽然题目说最多有100个外星人+1个源点。但是好像有102个点。这样的话。数组必须开到>= 102。
23333333....虽然只有这两个坑,但是bfs很混乱的我确实WA了一天多。
附bfs+prim代码。
#include<iostream>
#include<string>
#include<string.h>
#include<stdio.h>
using namespace std;
const int inf=2501;
char map[51][51];
int node[51][51];
int num;
int edge[102][102];
int x, y;
void bfs(int ii, int jj)
{
/***initial***/
int dist[55][55];
int que_x[2500], que_y[2500];
int head, tail;
int move[4][2] = {1, 0, -1, 0, 0, 1, 0, -1};
int vis[55][55];
memset(vis, 0, sizeof(vis));
head = 0;
tail = 0;
memset(dist, 0, sizeof(dist));
que_x[tail] = ii;
que_y[tail++] = jj;
vis[ii][jj] = 1;
while(head < tail)
{
int top_x = que_x[head];
int top_y = que_y[head++];
if (node[top_x][top_y])
edge[node[ii][jj]][node[top_x][top_y]] = dist[top_x][top_y];
for (int k=0; k<4; ++k)
{
int next_x = top_x + move[k][0];
int next_y = top_y + move[k][1];
if (next_x >= 0 && next_x < y && next_y >= 0 && next_y < x && !vis[next_x][next_y] && map[next_x][next_y] != '#')
{
vis[next_x][next_y] = 1;
dist[next_x][next_y] = dist[top_x][top_y] + 1;
que_x[tail] = next_x;
que_y[tail++] = next_y;
}
}
}
return;
}
int prim(void)
{
int s=1;
int m=1;
bool u[102];
u[s]=true;
int min_w;
int prim_w=0;
int point;
int low_dis[102];
for(int i=1;i<=num;i++)
{
low_dis[i]=inf;
u[i]=false;
}
while(true)
{
if(m==num)
break;
min_w=inf;
for(int i=2;i<=num;i++)
{
if(!u[i] && low_dis[i]>edge[s][i])
low_dis[i] = edge[s][i];
if(!u[i] && min_w>low_dis[i])
{
min_w=low_dis[i];
point=i;
}
}
s=point;
u[s]=true;
prim_w+=min_w;
m++;
}
return prim_w;
}
int main(int i,int j)
{
int test;
cin>>test;
while(test--)
{
memset(node,0,sizeof(node));
num=0;
cin>>x>>y;
char temp[20];
gets(temp);
for(i=0;i<y;i++)
{
gets(map[i]);
for(j=0;j<x;j++)
{
if(map[i][j]=='A'||map[i][j]=='S')
node[i][j]=++num;
}
}
for(i=0;i<y;i++)
for(j=0;j<x;j++)
if(node[i][j])
bfs(i,j);
cout<<prim()<<endl;
}
return 0;
}
POJ 3206 最小生成树的更多相关文章
- poj 3522(最小生成树应用)
题目链接:http://poj.org/problem?id=3522思路:题目要求最小生成树中最大边与最小边的最小差值,由于数据不是很大,我们可以枚举最小生成树的最小边,然后kruskal求最小生成 ...
- poj 2349(最小生成树应用)
题目链接:http://poj.org/problem?id=2349 思路:由于有S个专门的通道,我们可以先求一次最小生成树,然后对于最小生成树上的边从大到小排序,前S-1条边用S-1个卫星通道连接 ...
- poj 1258 最小生成树 模板
POJ 最小生成树模板 Kruskal算法 #include<iostream> #include<algorithm> #include<stdio.h> #in ...
- POJ 1258 最小生成树
23333333333 完全是道水题.因为是偶自己读懂自己做出来的..T_T.prim的模板题水过. DESCRIPTION:John竞选的时候许诺会给村子连网.现在给你任意两个村子之间的距离.让你求 ...
- poj 3026 (最小生成树)
题意:起点开始有超过100个人,总共不会超过100个外星人,问把所有的外星人都搜出来花的最小时间.一条路径上的时间跟人数是无关的,只跟路径长度有关. 思路:刚开始人都在起点,当派一定人数去最近的外星人 ...
- The Unique MST POJ - 1679 最小生成树判重
题意:求一个无向图的最小生成树,如果有多个最优解,输出"Not Unique!" 题解: 考虑kruskal碰到权值相同的边: 假设点3通过边(1,3)连入当前所维护的并查集s. ...
- POJ 2485 最小生成树
2333333333 又是水题.prim模板直接水过.求最小生成树里的最大的边的权值. 附代码:// 如果我木猜错的话.是要求最小生成树的最大边值. #include<stdio.h>#i ...
- Arctic Network POJ 2349 (最小生成树思想)
Description The Department of National Defence (DND) wishes to connect several northern outposts by ...
- Poj(2560),最小生成树,Prim
题目链接:http://poj.org/problem?id=2560 只想说“全都是套路”,关键建图. #include <stdio.h> #include <string.h& ...
随机推荐
- Hibernate4集成 Annotation使用教程
Spring4 MVC Hibernate4集成 Annotation 一. 本文所用环境 Spring4.0.3.RELEASE.Hibernate4.3.5.Final.Mysql 二. ...
- 转 C编译: 使用gdb调试
C编译: 使用gdb调试 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! gdb是the GNU Debugger的简称.它是 ...
- SecureCRT显示中文和语法高亮
因为默认情况下,SecureCRT不能显示语法高亮特性,整个界面颜色单一,看起来不爽,也没有效率,所有通过设置一下语法高亮还是很有必要的, 默认字体也看着不是很清晰,还是更改为我比较喜欢的Courie ...
- ZOJ-2338 The Towers of Hanoi Revisited 输出汉诺塔的最优解移动过程
题意:给定N(1<= N <=64)个盘子和M(4<= M <= 65)根柱子,问把N个盘子从1号柱子移动到M号柱子所需要的最少步数,并且输出移动过程. 分析:设f[i][j] ...
- Android 四种简单的动画(淡入淡出、旋转、移动、缩放效果)
最近在Android开发当中,用到的动画效果. public void onClick(View arg0) { // TODO 自动生成的方法存根 switch (arg0.getId()) { c ...
- 【Todo】Zookeeper学习
首先,Zookeeper是基于Paxos来进行分布式选举管理的,Paxos的内容可以参考我另一篇文章:http://www.cnblogs.com/charlesblc/p/6037004.html ...
- iOS 的 Safari 文件上传功能详解
iOS 6 给 Safari 浏览器带来的另外一个功能是文件上传,终于 Safari 终于支持 input 输入框的文件类型了,并且还支持 HTML媒体捕获(HTML Media Capture). ...
- control file sequential read 等待事件
可能的原因 control file sequential read Reading from the control file. This happens in many cases. For ex ...
- C\C++头文件说明
C\C++编程时候经常会遇到头文件问题而出现一系列的调试错误,下面我就简要的举例介绍一下头文件的作用,我们知道一个C\C++ 程序中开头一般都为: #include<iostream.h> ...
- xUtils更新到3.0后的基本使用规则
说实话,对于xUtils,是我最近才用到的开发框架(也是刚接触),对于其功能不得不说,简化了很多的开发步骤,可以说是非常好的开发工具,但是其最近更新到3.0也没有解决加载自定义ImageView报错的 ...