关闭

poj 1471 dfs 搜索三角形

405人阅读 评论(0) 收藏 举报

题意:在字符是'-'的区域中,找出最大的三角形。

思路:枚举'-'的地方作为三角形的顶,搜索三角形。注意,跟原图对比,判断三角形是正的还是倒的。。。

#include<iostream>
using namespace std;
int sum , len;
char map[220][500];
int dfs(int y,int x) {
	int st = y;
	int ed = y;
	int h = 1 , temp = x;
	int i , j;
	bool flag = 0;
	if ((x+y)%2==0) {
		while(1) {
			for (i = st - 1 ; i <= ed + 1 ; i ++) {
				if (map[temp-1][i]!='-') {//向上搜 
					flag = 1;//如果有不是'-'的  那么就搜索失败了 
					break;	
				}		
			}
			if (flag == 1) break;
			else h++;//如果没失败的话 搜索三角形的下一层  起始位置--  末尾++ 层数-- 
			st --; ed ++; temp --;
		}	
	} else {
		while(1) {
			for (i = st - 1 ; i <= ed + 1 ; i ++) {
				if (map[temp+1][i]!='-') {
					flag = 1;
					break;	
				}		
			}
			if (flag == 1) break;
			else h++;
			st --; ed ++; temp ++;
			//printf("h=%d\n",h);
		}		
	}
	return h;	
} 
int main() {
	int n , i , j;
	int t = 1;
	while (scanf("%d",&n)!=EOF) {
		if (n == 0) break;	
		getchar();
		for (i = 0 ; i < n ; i ++) gets(map[i]);
		int ans = 0 , tmp;
		for (i = 0 ; i < n ; i ++)	
			for (j = i ; j < (2*n-1-i) ; j ++) {
				if (map[i][j]=='-')	{
					tmp = dfs(j , i);//找到可搜的位置  从第i层搜 第j个位置 搜索的时候注意与原图对比 坐标和是偶数向上搜 奇数向下 
					ans = tmp > ans ? tmp : ans;	//找到三角形的层数 S = ans * ans 就OK 
					//printf("%d,%d tmp = %d\n",i,j,tmp);
				}
			}
			printf("Triangle #%d\n",t++);
			printf("The largest triangle area is %d.\n\n",ans*ans);
	}	
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:123529次
    • 积分:2924
    • 等级:
    • 排名:第12491名
    • 原创:174篇
    • 转载:16篇
    • 译文:0篇
    • 评论:18条
    最新评论