题意:在字符是'-'的区域中,找出最大的三角形。
思路:枚举'-'的地方作为三角形的顶,搜索三角形。注意,跟原图对比,判断三角形是正的还是倒的。。。
#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);
}
}