hdoj 4414 Finding crosses

http://acm.hdu.edu.cn/showproblem.php?pid=4414

sb题啊,我wa了好久,你妹妹。。

就是暴力枚举,然后我的方法是在检查每一位的时候检查他的相邻位,是否符合条件,队友的方法是后面来次dfs、、其实都一样。。

View Code
#include<iostream>

#include<stdio.h>

#include<string.h>

#include<algorithm>

using namespace std;

char map[100][100];

void init(int len)

{

    for(int i=0;i<len;i++)

        scanf("%s",map[i]);

}

int check(int x,int y,int len)

{

    int up=0;

    int down=0;

    int left=0;

    int right=0;

    int x0,y0;

     x0=x-1;

    while(x0>=0)

    {

        if(map[x0][y]=='#')up++;

        else break;

 if(map[x0][y-1]=='#'||map[x0][y+1]=='#')return 0;

//同时检查和他相邻的位

        x0--;

    }

     x0=x+1;

    while(x0<len)

    {

        if(map[x0][y]=='#')down++;

        else break;

        if(map[x0][y-1]=='#'||map[x0][y+1]=='#')return 0;

        x0++;

    }

     y0=y-1;

    while(y0>=0)

    {

        if(map[x][y0]=='#')left++;

        else break;

        if(map[x-1][y0]=='#'||map[x+1][y0]=='#')return 0;

        y0--;

    }

      y0=y+1;

    while(y0<len)

    {

        if(map[x][y0]=='#')right++;

        else break;

        if(map[x-1][y0]=='#'||map[x+1][y0]=='#')return 0;

        y0++;

    }

    if(up==down&&left==right&&up==left)

        if(up>=1)

            return 1;

    return 0;

}

void solve(int len)

{

    int ans=0;

    for(int i=1;i<len;i++)

        for(int j=1;j<len;j++)

            if(map[i][j]=='#')

                if(check(i,j,len))ans++;

    cout<<ans<<endl;

}

int main()

{

    int len;

    while(scanf("%d",&len))

    {

        if(!len)break;

        init(len);

        solve(len);

    }

    return 0;

}

你可能感兴趣的:(find)