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. [转帖]功耗降50%,性能升35%!三星3nm GAA 2021年量产

    功耗降50%,性能升35%!三星3nm GAA 2021年量产 http://www.chinaflashmarket.com/Instructor 在三星晶圆代工技术论坛(Samsung Found ...

  2. kafka生产者java客户端

    producer 包含一个用于保存待发送消息的缓冲池,缓冲池中消息是还没来得及传输到kafka集群的消息. 位于底层的kafka I/O线程负责将缓冲池中的消息转换成请求发送到集群.如果在结束prod ...

  3. zookeeper 分布式协调服务

    分布式协调服务作用是将多机协调的职责从分布式应用中独立出来,以减少系统的耦合性和增加扩展性. 而zookeeper采用分布式中经典的主从架构:master->slave,通常以动态的存储分布式应 ...

  4. JetBrains插件

    1,翻译插件 TranslationPlugin 打开翻译对话框 : Ctrl + Shift + O(英文字母o) 鼠标取词并翻译 : Ctrl + Shift + Y http://yiiguxi ...

  5. laravel框架之增刪改查

    <?php namespace App\Http\Controllers\admin; use Illuminate\Http\Request as request; use App\Http\ ...

  6. 小白学Python(19): Pyinstaller 生成 exe 文件

    python 默认并不包含 PyInstaller 模块,因此需要自行安装 PyInstaller 模块. 安装 PyInstaller 模块与安装其他 Python 模块一样,使用 pip 命令安装 ...

  7. PythonDay06

    第六章 今日内容 小数据池 深浅拷贝 集合 小数据池 == is id == 判断两个值是否相等 is --- 是 判断两个值的内存地址是否相等 代码块:一个py文件,一个函数,一个模块,终端中每一行 ...

  8. js中的Math对象

    绝对值Math.abs()     console.log(Math.abs(-25));     console.log(Math.abs('-25'));//存在隐式转换可以求绝对值     co ...

  9. SPA(单页面应用)和MPA(多页面应用)

    话不多说,直接看图,一目了然

  10. 华为设备acl配置

    拓扑图: 需求: 1.-vlan10内所有的主机,只能通过http访问vlan30-server的服务器;不能访问vlan40-server服务器2.-vlan20-pc1主机,可以访问vlan40- ...