poj 1471 dfs 搜索三角形

原创 2012年03月27日 21:02:50

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

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

#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);
	}	
}


相关文章推荐

POJ 1471 Triangles(dfs)

sd Description It is always very nice to have little brothers or sisters. You can tease them, lo...

poj3187 数字三角形(dfs)

数字三角形 题目描述 FJ and his cows enjoy playing a mental game. They write down the numbers from 1 t...

POJ-1471-Tree(点分治)

题目链接:http://poj.org/problem?id=1741 大致题意: 给定一棵N(1 vu,两点间的最短路径长度,路径的长度定义为路径上所有边的权和。 再给定一个K(1 足dist(a,...

POJ3373-Changing Digits【DFS+强剪枝】

  • 2011年08月19日 00:44
  • 12KB
  • 下载

poj2488——dfs深度优先遍历

  • 2013年07月24日 10:21
  • 2KB
  • 下载

POJ 2488 A Knight's Journey (dfs+改变搜索顺序)

题目链接POJ 2488题目大意给定一个n*m的棋盘,一个跳“日”字的马可以从任一个格子开始去遍历棋盘,判断马能否不重复的走过所有格,并记录下其中按字典序排列的第一种路径。 棋盘的编号:n(行)方向...

POJ-1088-动规-DFS+记忆化搜索

中文的就不解释了! 简单的DFS+记忆搜索! /*336K 79MS AC*/ #include using namespace std; #define MAX 105 int R,C; int m...

选择陪审员 POJ1015 Jury Compromise 动态规划DP 搜索DFS 贪心

选择陪审员 POJ1015 Jury Compromise 动态规划DP 搜索DFS 贪心 感觉比较难的一题,即使做第三遍也感觉比较吃力。题目描述很清楚,英文理解无障碍。此题实质:n个物体中选m个。 ...

POJ 1321棋盘问题(简单搜索dfs回溯)

简单深搜+回溯题目:http://poj.org/problem?id=1321Description: 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋...

poj 1414 dfs 搜索

给一个正三角形, 可以在任意一个 0 的地方填上数字 c   ,填完之后计算出得分的最大值。 计算得分的规则:  数字相同的连通的集合  如果和某个0连通,就忽略了。  如果没有和0连通,分2种情况:...
  • sky_zdk
  • sky_zdk
  • 2017年05月04日 16:54
  • 86
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj 1471 dfs 搜索三角形
举报原因:
原因补充:

(最多只允许输入30个字)