POJ 1383 Labyrinth (bfs 树的直径)
Labyrinth
题目链接:
http://acm.hust.edu.cn/vjudge/contest/130510#problem/E
Description
The northern part of the Pyramid contains a very large and complicated labyrinth. The labyrinth is divided into square blocks, each of them either filled by rock, or free. There is also a little hook on the floor in the center of every free block. The ACM have found that two of the hooks must be connected by a rope that runs through the hooks in every block on the path between the connected ones. When the rope is fastened, a secret door opens. The problem is that we do not know which hooks to connect. That means also that the neccessary length of the rope is unknown. Your task is to determine the maximum length of the rope we could need for a given labyrinth.
Input
The input consists of T test cases. The number of them (T) is given on the first line of the input file. Each test case begins with a line containing two integers C and R (3
Output
Your program must print exactly one line of output for each test case. The line must contain the sentence "Maximum rope length is X." where Xis the length of the longest path between any two free blocks, measured in blocks.
Sample Input
```
2
3 3
###
#.#
###
7 6
#######
#.#.###
#.#.###
#.#.#.#
#.....#
#######
```
Sample Output
```
Maximum rope length is 0.
Maximum rope length is 8.
```
Source
2016-HUST-线下组队赛-5
##题意:
以邻接矩阵的形式给出树,求树的直径.
##题解:
两遍搜索求树的直径即可.
由于数据规模较大,这题很容易爆栈,所以得用bfs.
##代码:
``` cpp
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define maxn 1010
#define inf 0x3f3f3f3f
#define mod 1000000007
#define mid(a,b) ((a+b)>>1)
#define IN freopen(".in","r",stdin);
using namespace std;
int n,m;
char mp[maxn][maxn];
bool is_ok(int x, int y) {
return x>=0 && y>=0 && x<n && y<m;
}
int dir[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
int ans,px,py;
bool vis[maxn][maxn];
//void dfs(int x, int y, int step) {
// vis[x][y] = 1;
// bool flag = 0;
// for(int i=0; i<4; i++) {
// int xx = x + dir[i][0];
// int yy = y + dir[i][1];
// if(!is_ok(xx,yy) || mp[xx][yy]=='#' || vis[xx][yy]) continue;
// dfs(xx, yy, step+1);
// flag = 1;
// }
//
// if(!flag && step > ans) {
// ans = step;
// px = x, py = y;
// }
//}
struct node {
int x,y,step;
};
void bfs() {
queue q; while(!q.empty()) q.pop();
node cur,next;
memset(vis, 0, sizeof(vis));
cur = {px,py,0}; vis[px][py] = 1;
q.push(cur);
while(!q.empty()) {
bool flag = 0;
cur = q.front(); q.pop();
for(int i=0; i<4; i++) {
int xx = cur.x + dir[i][0];
int yy = cur.y + dir[i][1];
if(!is_ok(xx,yy) || mp[xx][yy]=='#' ||vis[xx][yy]) continue;
vis[xx][yy] = 1;
next = {xx,yy,cur.step+1};
q.push(next);
flag = 1;
}
if(!flag && cur.step > ans) {
ans = cur.step;
px = cur.x; py = cur.y;
}
}
}
int main()
{
IN;
int T;
cin >> T;
while (T--){
scanf("%d %d", &m, &n); getchar();
for (int i = 0; i < n; i++) {
gets(mp[i]);
}
px = py = -1;
for (int i = 0; i < n; i++) {
for(int j=0; j < m; j++) {
if(mp[i][j] == '.') {
px = i, py = j;
break;
}
}
if(px != -1) break;
}
ans = 0;
bfs();
ans = 0;
bfs();
printf("Maximum rope length is %d.\n", ans);
}
return 0;
}
POJ 1383 Labyrinth (bfs 树的直径)的更多相关文章
- POJ 1383 Labyrinth (树的直径求两点间最大距离)
Description The northern part of the Pyramid contains a very large and complicated labyrinth. The la ...
- POJ 1383题解(树的直径)(BFS)
题面 Labyrinth Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 4997 Accepted: 1861 Descript ...
- poj 1383 Labyrinth【迷宫bfs+树的直径】
Labyrinth Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 4004 Accepted: 1504 Descrip ...
- poj 1383 Labyrinth
题目连接 http://poj.org/problem?id=1383 Labyrinth Description The northern part of the Pyramid contains ...
- poj 1985 Cow Marathon 树的直径
题目链接:http://poj.org/problem?id=1985 After hearing about the epidemic of obesity in the USA, Farmer J ...
- codeforce 337D Book of Evil ----树形DP&bfs&树的直径
比较经典的老题 题目意思:给你一颗节点数为n的树,然后其中m个特殊点,再给你一个值d,问你在树中有多少个点到这m个点的距离都不大于d. 这题的写法有点像树的直径求法,先随便选择一个点(姑且设为点1)来 ...
- BZOJ 3363 POJ 1985 Cow Marathon 树的直径
题目大意:给出一棵树.求两点间的最长距离. 思路:裸地树的直径.两次BFS,第一次随便找一个点宽搜.然后用上次宽搜时最远的点在宽搜.得到的最长距离就是树的直径. CODE: #include < ...
- codeforces 690C2 C2. Brain Network (medium)(bfs+树的直径)
题目链接: C2. Brain Network (medium) time limit per test 2 seconds memory limit per test 256 megabytes i ...
- POJ 3162 Walking Race(树的直径+单调队列)
题目大意:对一棵树,求出从每个结点出发能到走的最长距离(每个结点最多只能经过一次),将这些距离按排成一个数组得到dis[1],dis[2],dis[3]……dis[n] ,在数列的dis中求一个最长的 ...
随机推荐
- 1~n的全排列--阅文集团2018校招笔试题
题目大意:给定整数n,求出1~n的全排列 示例 输入:n=3 输出:[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1] import java.util.S ...
- ContextLoaderListener错误
在web.xml中添加如下配置 <context-param> <param-name>contextConfigLocation</param-name> < ...
- [转帖]Windows下cwRsyncServer双机连续同步部署
Windows下cwRsyncServer双机连续同步部署 https://www.cnblogs.com/nulige/p/7607503.html 找时间做一下测试 应该能更好的实现 自动部署的功 ...
- C语言黑与白问题
问题描述: 有A.B.C.D.E这5个人,每个人额头上都帖了一张黑或白的纸.5人对坐,每 个人都可以看到其他人额头上纸的颜色.5人相互观察后: A说:“我看见有3人额头上贴的是白纸,1人额头上贴的是黑 ...
- C++中的新型类型转换
1,C 语言中已经有类型之间的强制转换,C++ 做了改善: 2,C 方式的强制类型转换: 1,(Type) (Expression): 2,Type (Expression): 1,这种方式和上述方式 ...
- Spark出现java.lang.stackoverflowerror的解决方法
正在测试的程序需要多次迭代(400+次),每次迭代有复杂的运算 迭代到100多次的时候报java.lang.stackoverflowerror的错误 解决方法:先checkpoint()再count ...
- 使用 VS Code 搭建 TypeScript 开发环境
使用 VS Code 搭建 TypeScript 开发环境 TypeScript 是 JavaScript 的超集,TypeScript 只是增强了 JavaScript 而非改变了 JavaScri ...
- 剑指offer-二叉树中和为某一值的路径-python
题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大 ...
- python数据结构:pandas(1)
废话不说,直接上干货 一.数据结构 (1)Series:一维数组,与Numpy中的一维array类似.二者与Python基本的数据结构List也很相近.Series如今能保存不同种数据类型,字符串.b ...
- 关于javaweb 项目 ssm框架 启动tomcat服务器同时启动一个socket服务
1.创建监听类 import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax. ...