UVA - 585 Triangles 暴力

来源:互联网 发布:软件系统 编辑:程序博客网 时间:2024/06/06 05:51

题目大意:要求你找出一个由白色三角形围成的最大三角形

解题思路:假设每一点都为顶点,然后暴力枚举。这里要注意一下三角形的朝向,下标和为奇数的点的三角形的底边是在下面的,而下标和为偶数的点的底边是在上面的

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define maxn 105#define maxl 205int g[maxn][maxl], ans, n;char str[maxl];void dfs(int x, int y, int len, int mark, int sum) {    if(x < 0 || x >= n || y < 0 || y >= (2 * n - 1)) {        ans = max(ans,sum);        return ;    }    for(int i = y , j = 0; j < len; i++, j++){        if(!g[x][i]) {            ans = max(ans, sum);            return ;        }    }    if(mark)        dfs(x+1,y-1,len + 2, mark, sum + len);    else        dfs(x-1,y-1,len + 2, mark, sum + len);}void solve() {    for(int i = 0; i < n; i++)        for(int j = i, k = 0; k < 2 * (n - i) - 1; j++, k++) {            if(g[i][j]) {                if((i + j) % 2)                     dfs(i+1,j-1,3,1,1);                else                    dfs(i-1,j-1,3,0,1);            }        }}int main() {    int cas = 1;    while(scanf("%d", &n) == 1 && n) {        ans = 0;        memset(g,0,sizeof(g));        for(int i = 0; i < n; i++) {            scanf("%s", str);            for(int j = i; j < i + strlen(str); j++)                if(str[j - i] == '-')                     g[i][j] = 1;        }        solve();        printf("Triangle #%d\n", cas++);        printf("The largest triangle area is %d.\n\n", ans);    }       return 0;}
0 0
原创粉丝点击