zoukankan      html  css  js  c++  java
  • 杭州网赛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;
    }
  • 相关阅读:
    LeetCode --- Roman to Integer
    LeetCode --- Maximum Depth of Binary Tree
    LeetCode --- Minimum Path Sum
    Hashkell 第一篇
    LeetCode --- Partition List
    LeetCode --- Valid Palindrome
    LeetCode --- Longest Consecutive Sequence
    LeetCode --- Insertion Sort List
    数据库lib7第2, 3题(创建索引和触发器)
    LeetCode --- Reverse Integer
  • 原文地址:https://www.cnblogs.com/markliu/p/2736261.html
Copyright © 2011-2022 走看看