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 树的直径)的更多相关文章

  1. POJ 1383 Labyrinth (树的直径求两点间最大距离)

    Description The northern part of the Pyramid contains a very large and complicated labyrinth. The la ...

  2. POJ 1383题解(树的直径)(BFS)

    题面 Labyrinth Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 4997 Accepted: 1861 Descript ...

  3. poj 1383 Labyrinth【迷宫bfs+树的直径】

    Labyrinth Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 4004   Accepted: 1504 Descrip ...

  4. poj 1383 Labyrinth

    题目连接 http://poj.org/problem?id=1383 Labyrinth Description The northern part of the Pyramid contains ...

  5. poj 1985 Cow Marathon 树的直径

    题目链接:http://poj.org/problem?id=1985 After hearing about the epidemic of obesity in the USA, Farmer J ...

  6. codeforce 337D Book of Evil ----树形DP&bfs&树的直径

    比较经典的老题 题目意思:给你一颗节点数为n的树,然后其中m个特殊点,再给你一个值d,问你在树中有多少个点到这m个点的距离都不大于d. 这题的写法有点像树的直径求法,先随便选择一个点(姑且设为点1)来 ...

  7. BZOJ 3363 POJ 1985 Cow Marathon 树的直径

    题目大意:给出一棵树.求两点间的最长距离. 思路:裸地树的直径.两次BFS,第一次随便找一个点宽搜.然后用上次宽搜时最远的点在宽搜.得到的最长距离就是树的直径. CODE: #include < ...

  8. codeforces 690C2 C2. Brain Network (medium)(bfs+树的直径)

    题目链接: C2. Brain Network (medium) time limit per test 2 seconds memory limit per test 256 megabytes i ...

  9. POJ 3162 Walking Race(树的直径+单调队列)

    题目大意:对一棵树,求出从每个结点出发能到走的最长距离(每个结点最多只能经过一次),将这些距离按排成一个数组得到dis[1],dis[2],dis[3]……dis[n] ,在数列的dis中求一个最长的 ...

随机推荐

  1. django学习——通过HttpResponseRedirect 和 reverse实现重定向(转载)

    人分类: django   用django开发web应用, 经常会遇到从一个旧的url转向一个新的url,也就是重定向. HttpResponseRedirect:构造函数的第一个参数是必要的 — 用 ...

  2. Maximum Depth of Binary Tree(二叉树最大深度)

    来源:https://leetcode.com/problems/maximum-depth-of-binary-tree Given a binary tree, find its maximum ...

  3. 第四周总结 and 实验二

    课堂总结 一.课堂笔记总览     1.String类两种实例方法区别 String str1 = "hello";String str2 = "hello"; ...

  4. Quartz任务调度的测试Demo1(含有配置文件的demo)

    Quartz是一个作业任务调度的框架,所在项目组中“消息推送模块”使用到此框架,于是写个demo熟悉下quart的用法: 使用Spring框架来集成Quartz的任务调度任务. 1.搭建Spring框 ...

  5. How to attach multiple files in the Send Mail Task in SSIS

    Let’s say you need to create a SSIS package that creates 2 files and emails the files to someone. Yo ...

  6. qtreewidget 显示保存xml文件

    此文是读取和存储已知结构的xml,对于未知结构的xml,可以用递归方法读取和遍历.可参考文章:Qt遍历不规则树的节点. 1.QTreewidget设置 //折叠图标(三角图标)换成自定义图标 ui-& ...

  7. [BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块)

    [BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块) 题面 求 \[\sum_{i=1}^{n} \sum_{j=1}^{m} \mathrm{lcm}(i,j)\] 分析 \[\su ...

  8. 数据库允许空值(null),往往是悲剧的开始 (转)

    数据库字段允许空值,会遇到一些问题,此处包含的一些知识点,和大家聊一聊. 数据准备: create table user ( id int, name varchar(20), index(id) ) ...

  9. django基础篇05-Form验证组件

    Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 基本简单的操作: from django im ...

  10. redHat 安装mono 错误

    make[6]: * [do-install] Error 2 make[6]: Leaving directory /root/lindexi/mono-2.11.3/mcs/class/Syste ...