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 <= C,R <= 1000) indicating the number of columns and rows. Then exactly R lines follow, each containing C characters. These characters specify the labyrinth. Each of them is either a hash mark (#) or a period (.). Hash marks represent rocks, periods are free blocks. It is possible to walk between neighbouring blocks only, where neighbouring blocks are blocks sharing a common side. We cannot walk diagonally and we cannot step out of the labyrinth. 
The labyrinth is designed in such a way that there is exactly one path between any two free blocks. Consequently, if we find the proper hooks to connect, it is easy to find the right path connecting them.

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.

Hint

Huge input, scanf is recommended. 
If you use recursion, maybe stack overflow. and now C++/c 's stack size is larger than G++/gcc

AC代码

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int c,r,dx,dy;
int ans;
char a[1005][1005];
int b[1005][1005];
int mx[4] = {0,0,1,-1};
int my[4] = {1,-1,0,0};
void dfs(int x,int y,int t)
{
b[x][y]=1;
if(ans<t)
{
dx=x;
dy=y;
ans=t;
}
int xx,yy,i;
for(i=0;i<4;i++)
{
xx=x+mx[i];
yy=y+my[i];
if(xx>-1&&xx<r&&yy>-1&&yy<c&&!b[xx][yy]&&a[xx][yy]!='#')
dfs(xx,yy,t+1);
}
b[x][y]=1;
}
int main()
{
int t,i,j,sx,sy;
scanf("%d",&t);
while(t--)
{
int l=0;
ans=0;
memset(b,0,sizeof(b));
scanf("%d %d",&c,&r);
for(i=0;i<r;i++)
{
scanf("%s",a[i]);
for(j=0;j<c&&l==0;j++)
if(a[i][j]=='.')
{
l=1;
sx=i;
sy=j;
}
}
dfs(sx,sy,0);
memset(b,0,sizeof(b));
dfs(dx,dy,0);
printf("Maximum rope length is %d.\n",ans);
}
}

  

我的代码:

 1 #include<cstdio>
2 #include<iostream>
3 #include<cstring>
4 #include<algorithm>
5
6 using namespace std;
7
8 int r, c;
9 char a[1005][1005];
10 int num[1005][1005];
11 int n_step, max_step, nx, ny;
12 int dx[4] = {0, 1, 0, -1};
13 int dy[4] = {1, 0, -1, 0};
14
15 int dfs(int x, int y, int step)
16 {
17 n_step = step;
18 a[x][y] = '#';
19 for(int i = -1; i <= 1; i++)
20 {
21
22 max_step = max(max_step, n_step);
23 nx = x + dx[i];
24 ny = y + dy[i];
25 if(nx > 0 && nx <= r && ny > 0 && ny <= c && a[nx][ny] == '.')
26 {
27 n_step++;
28 dfs(nx, ny, n_step);
29 }
30 }
31 return max_step;
32 }
33
34 int main()
35 {
36 int t;
37
38 scanf("%d", &t);
39 while(t--)
40 {
41 n_step = 0;
42 max_step = 0;
43 scanf("%d %d", &r, &c);
44 getchar();
45 memset(num, 0, sizeof(num));
46 for(int i = 0; i < max(r, c) + 1; i++)
47 {
48 a[0][i] = '#';
49 a[i][0] = '#';
50 a[r+1][i] = '#';
51 a[i][c+1] = '#';
52 }
53
54 //cout << r << c <<endl;
55 for(int i = 1; i <= r; i++)
56 {
57 for(int j = 1; j <= c; j++)
58 {
59 scanf("%c", &a[i][j]);
60 }
61 getchar();
62 }
63
64 for(int i = 1; i <= r; i++)
65 {
66 for(int j = 1; j <= c; j++)
67 {
68 if(a[i][j] == '.')
69 {
70 //cout << "++" << i << j << endl;
71 int ans = dfs(i, j, 0);
72 printf("%d\n", ans);
73 break;
74 }
75 }
76 }
77
78
79 }
80 return 0;
81 }

I - 树的直径 POJ - 1383的更多相关文章

  1. 树的直径 poj 2631

    树的直径:从随意一点出发,BFS找到最远的距离,然后在从该点出发BFS找到最远的距离 #include <iostream> #include <algorithm> #inc ...

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

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

  3. POJ 1383 Labyrinth (bfs 树的直径)

    Labyrinth 题目链接: http://acm.hust.edu.cn/vjudge/contest/130510#problem/E Description The northern part ...

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

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

  5. 树的最长链-POJ 1985 树的直径(最长链)+牛客小白月赛6-桃花

    求树直径的方法在此转载一下大佬们的分析: 可以随便选择一个点开始进行bfs或者dfs,从而找到离该点最远的那个点(可以证明,离树上任意一点最远的点一定是树的某条直径的两端点之一:树的直径:树上的最长简 ...

  6. poj 1985 Cow Marathon 树的直径

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

  7. POJ 1985 Cow Marathon && POJ 1849 Two(树的直径)

    树的直径:树上的最长简单路径. 求解的方法是bfs或者dfs.先找任意一点,bfs或者dfs找出离他最远的那个点,那么这个点一定是该树直径的一个端点,记录下该端点,继续bfs或者dfs出来离他最远的一 ...

  8. POJ 2631 Roads in the North(树的直径)

    POJ 2631 Roads in the North(树的直径) http://poj.org/problem? id=2631 题意: 有一个树结构, 给你树的全部边(u,v,cost), 表示u ...

  9. POJ 1985 Cow Marathon(树的直径模板)

    http://poj.org/problem?id=1985 题意:给出树,求最远距离. 题意: 树的直径. 树的直径是指树的最长简单路. 求法: 两遍BFS :先任选一个起点BFS找到最长路的终点, ...

随机推荐

  1. k8s v1.18.2 centos7 下环境搭建

    准备 服务器:3台机器--1台主.2台工作节点,可以使用virtualbox 搭建虚拟机 主机名 centos version ip docker version flannel version 主机 ...

  2. const成员函数可以将非const指针作为返回值吗?

    先给出一段代码 class A { int *x; public: int *f() const { return x; } }; 成员函数f返回指向私有成员 x 的非常量指针,我认为这会修改成员x ...

  3. 基于Hi3559AV100 RFCN实现细节解析-(1)VGS初介绍

    下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,因为RFCN用到了VGS加框,因此本篇随笔将给出VGS视频图像子系统的具体说明,便于后面RFCN的细节实现说明. VGS 是视频图形子 ...

  4. PAT-1152(Google Recruitment)字符串+素数

    Google Recruitment PAT-1152 本题最需要注意的是最后输出要以字符串形式输出,否则可能会出现前导0的情况. /** * @Author WaleGarrett * @Date ...

  5. python工业互联网应用实战7—业务层

    本章我们演示代码是如何"进化"的,实战的企业日常开发过程中,系统功能总伴随着业务的不断增加,早期简单的代码慢慢的越来越复杂,敏捷编程中的"禅"--简单设计.快速 ...

  6. AtCoder Beginner Contest 194

    A I Scream int main() { IOS; int a, b; cin >> a >> b; if(a + b >= 15 && b > ...

  7. 商品购买 & 收银台订单优化测试点疑问归纳梳理

    摘要 更新内容 更新人 更新时间 初版内容 Young 2020.11.20  16:40 贾轩审查确认 Harry 2020.11.20  17:00 和林森沟通问题答疑 参与人:林森.Harry. ...

  8. 「NOIP模拟赛」Round 2

    Tag 递推,状压DP,最短路 A. 篮球比赛1 题面 \(Milky\ Way\)的代码 #include <cstdio> const int N = 2000, xzy = 1e9 ...

  9. Django之模版层

    一.模版简介 你可能已经注意到我们在例子视图中返回文本的方式有点特别,也就是说,HTML被直接硬编码在python代码之中. def current_datetime(request): now = ...

  10. fianl关键词

    一.final关键字概述 final关键字具有最终或不可改变的含义,可用于修饰类.变量.方法.因此被final修饰的类.变量.方法具有以下特征: --final修饰的类不能被继承: --final修饰 ...