【POJ】[1383]Labyrinth

文章字数:226

问题描述

问题分析

依照树的直径的思路
先找出任意一点的最远点u,再找出u的最远点v,u-v距离即使最远距离,这题同样按照这种思路进行搜索
不过虽然题目说容易栈溢出,但是提交时也没有这种错误情况

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include<stdio.h>
#include<string.h>
int max,tn,tm;
int W,H;
int flag[1200][1200];
char map[1200][1200];
int tmove[4]= {1,-1,0,0};
void dfs(int n,int m,int cnt) {
	if(max<cnt) {
		max=cnt,tn=n,tm=m;
	}
	for(int i=0; i<4; i++) {
		int moven=n+tmove[i],movem=m+tmove[(i+2)%4];
		if(moven>=0&&moven<H&&movem>=0&&movem<W&&map[moven][movem]=='.'&&!flag[moven][movem]) {
			flag[moven][movem]=1;
			dfs(moven,movem,cnt+1);
		}
	}
}
int main() {
	int T;
	scanf("%d",&T);
	while(T--) {
		scanf("%d %d",&W,&H);
		getchar();
		for(int i=0; i<H; i++) {
			for(int j=0; j<W; j++) {
				scanf("%c",&map[i][j]);
				if(map[i][j]=='.') {
					tn=i;
					tm=j;
				}
			}
			getchar();
		}
		max=0;
		memset(flag,0,sizeof(flag));
		flag[tn][tm]=1;
		dfs(tn,tm,0);
		memset(flag,0,sizeof(flag));
		flag[tn][tm]=1;
		dfs(tn,tm,0);
		printf("Maximum rope length is %d.\n",max);
	}
	return 0;
}

该内容采用 CC BY-NC-SA 4.0 许可协议。

如果对您有帮助或存在意见建议,欢迎在下方评论交流。

加载中...