杭州网赛E(枚举)&hdu4414

方向开始都搞乱了。调半天。

#include <iostream>
#include <stdio.h>
using namespace std;
int n,u,d,l,r,num,flag;
char map[55][55];
int dfsu(int x,int y){
    if(map[x][y]!='#') return num;
    if(map[x][y-1]=='#' || map[x][y+1]=='#'){
        flag=1;
        return num;
    }
    if(map[x][y]=='#'){
        num++;
        dfsu(x-1,y);
    }

}
int dfsd(int x,int y){
    if(map[x][y]!='#') return num;
    if(map[x][y-1]=='#' || map[x][y+1]=='#'){
        flag=1;
        return num;
    }
    if(map[x][y]=='#'){
        num++;
        dfsd(x+1,y);
    }

}
int dfsl(int x,int y){
    if(map[x][y]!='#') return num;
    if(map[x-1][y]=='#' || map[x+1][y]=='#'){
        flag=1;
        return num;
    }
    if(map[x][y]=='#'){
        num++;
        dfsl(x,y-1);
    }

}
int dfsr(int x,int y){
    if(map[x][y]!='#') return num;
    if(map[x-1][y]=='#' || map[x+1][y]=='#'){
        flag=1;
        return num;
    }
    if(map[x][y]=='#'){
        num++;
        dfsr(x,y+1);
    }

}
int main()
{
    //freopen("in.txt","r",stdin);
    while(scanf("%d",&n)!=EOF){
        if(n==0) break;
        for(int i=0;i<n;i++){
            scanf("%s",map[i]);
        }
        /*for(int i=0;i<n;i++){
            printf("%s\n",map[i]);
        }*/
        int res=0;
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                flag=0;
                if(map[i][j]=='#' && i>0 && j>0 && i<n-1 && j<n-1){
                    num=0;
                    l=dfsl(i,j-1);
                    num=0;
                    r=dfsr(i,j+1);
                    num=0;
                    u=dfsu(i-1,j);
                    num=0;
                    d=dfsd(i+1,j);

                    //printf("x=%d,y=%d %d %d %d %d\n",i,j,u,d,l,r);
                    if(u>0 && d>0 && l>0 && r>0 && !flag && u==d && d==l && l==r && r==u){
                        res++;
                    }
                }
            }
        }
        printf("%d\n",res);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/markliu/p/2736261.html