I - 树的直径 POJ - 1383
Input
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
Sample Input
2
3 3
###
#.#
###
7 6
#######
#.#.###
#.#.###
#.#.#.#
#.....#
#######
Sample Output
Maximum rope length is 0.
Maximum rope length is 8.
Hint
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的更多相关文章
- 树的直径 poj 2631
树的直径:从随意一点出发,BFS找到最远的距离,然后在从该点出发BFS找到最远的距离 #include <iostream> #include <algorithm> #inc ...
- poj 1383 Labyrinth【迷宫bfs+树的直径】
Labyrinth Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 4004 Accepted: 1504 Descrip ...
- POJ 1383 Labyrinth (bfs 树的直径)
Labyrinth 题目链接: http://acm.hust.edu.cn/vjudge/contest/130510#problem/E Description The northern part ...
- POJ 1383题解(树的直径)(BFS)
题面 Labyrinth Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 4997 Accepted: 1861 Descript ...
- 树的最长链-POJ 1985 树的直径(最长链)+牛客小白月赛6-桃花
求树直径的方法在此转载一下大佬们的分析: 可以随便选择一个点开始进行bfs或者dfs,从而找到离该点最远的那个点(可以证明,离树上任意一点最远的点一定是树的某条直径的两端点之一:树的直径:树上的最长简 ...
- poj 1985 Cow Marathon 树的直径
题目链接:http://poj.org/problem?id=1985 After hearing about the epidemic of obesity in the USA, Farmer J ...
- POJ 1985 Cow Marathon && POJ 1849 Two(树的直径)
树的直径:树上的最长简单路径. 求解的方法是bfs或者dfs.先找任意一点,bfs或者dfs找出离他最远的那个点,那么这个点一定是该树直径的一个端点,记录下该端点,继续bfs或者dfs出来离他最远的一 ...
- POJ 2631 Roads in the North(树的直径)
POJ 2631 Roads in the North(树的直径) http://poj.org/problem? id=2631 题意: 有一个树结构, 给你树的全部边(u,v,cost), 表示u ...
- POJ 1985 Cow Marathon(树的直径模板)
http://poj.org/problem?id=1985 题意:给出树,求最远距离. 题意: 树的直径. 树的直径是指树的最长简单路. 求法: 两遍BFS :先任选一个起点BFS找到最长路的终点, ...
随机推荐
- Linux安装jdk(两种方式)
最近在研究大数据方面的东西,业务场景是从设备采集数据经过处理然后存放DB. 建设上面的环境第一步肯定是安装jdk,所以和大家一起学一下基本知识centos7.5安装jdk1.8. 安装jdk有两种方法 ...
- tesseract-ocr和tesseract.exe is not installed or it's not in your path问题解决
一.解决方案: 1.http://www.ddooo.com/softdown/94968.htm 打开下载的压缩包,找到"tesseract-ocr-setup-3.02.02.exe ...
- Omega System Trading and Development Club内部分享策略Easylanguage源码 (第二期)
更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流. 我们曾经在前文(链接),为大家分享我们精心整理的私货:"System Trading and ...
- Java练习——String类练习
需求: 给定一个字符串String str=" Hello World",返回长度,返回o第一次出现的索引,返回最后一个o的索引,把所有的l都替换为m,并把字符串str按空格分割为 ...
- pytorch(06)autograd与逻辑回归
autograd与逻辑回归 自动求导系统中两个常用的方法: torch.autograd.backward and torch.autograd.grad 演示理解一阶导数.二阶导数的求导过程 理解自 ...
- 05.从0实现一个JVM语言之目标平台代码生成-CodeGenerator
从0实现JVM语言之目标平台代码生成-CodeGenerator 源码github仓库, 如果这个系列文章对你有帮助, 希望获得你的一个star 本节相关代码生成package地址 阶段性的告别 非常 ...
- Office2013安装教程(附安装包+激活工具)
office2013中文版是微软推出的新一代office办公软件,重点加强了云服务项目,Office2013[☜借你手指用下]采用了全新的Merto界面,使用户更加专注于内容,配合Windows 8的 ...
- MongoDB -> kafka 高性能实时同步(sync 采集)mongodb数据到kafka解决方案
写这篇博客的目的 让更多的人了解 阿里开源的MongoShake可以很好满足mongodb到kafka高性能高可用实时同步需求(项目地址:https://github.com/alibaba/Mong ...
- 从一部电影史上的趣事了解 Spring 中的循环依赖问题
title: 从一部电影史上的趣事了解 Spring 中的循环依赖问题 date: 2021-03-10 updated: 2021-03-10 categories: Spring tags: Sp ...
- 手把手教你DNS劫持挂马
出品|MS08067实验室(www.ms08067.com) 本文作者:BlackCat(Ms08067内网安全小组成员) 首先学习DNS劫持之前,务必要了解下DNS是个什么玩意. DNS(域名系统) ...