您的位置:首页 > 其它

hdu4414Finding crosses 水题

2015-10-10 20:08 190 查看
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std ;
const int maxn = 50 ;
char map[maxn][maxn] ;
int n ;
int dx[4] = {0 , 0 , 1 , -1} ;
int dy[4] = {1 , -1 , 0 , 0} ;
bool judge(int x , int y)
{
if(x < 1 || x > n || y < 1 || y > n)
return false ;
return true ;
}
int dfs(int x , int y , int len , int dd)
{
if(!judge(x , y) || map[x][y] != '#')return len ;
for(int i = 0;i < 4;i++)
if(i != dd && i != (dd^1))
{
int nx = dx[i] + x ;
int ny = dy[i] + y ;
if(judge(nx ,ny) && map[nx][ny] == '#')
return  0 ;
}
return dfs(x + dx[dd] , y + dy[dd] , len + 1 , dd) ;
}
int main()
{
while(scanf("%d" , &n) && n)
{
for(int i = 1;i <= n;i++)
scanf("%s" , &map[i][1]) ;
int ans = 0 ;
for(int i = 1;i <= n;i++)
for(int j = 1;j <= n;j++)
if(map[i][j] == '#')
{
int t0 = dfs(i + dx[0] , j + dy[0] , 0 , 0) ;
int t1 = dfs(i + dx[1] , j + dy[1] , 0 , 1) ;
int t2 = dfs(i + dx[2] , j + dy[2] , 0 , 2) ;
int t3 = dfs(i + dx[3] , j + dy[3] , 0 , 3) ;
if(t0 >= 1 && t0 == t1 && t1 == t2 && t2 == t3)
ans++ ;
}
cout<<ans<<endl;
}
return  0 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: