poj 1471 dfs 搜索三角形

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

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

#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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值