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 ; }
相关文章推荐
- java md5加密字符
- scrapy安装
- Codevs P1116 四色问题
- ListView中的adapter的观察者模式
- 【第4节】Java代码实现栈--小例子--分隔符匹配
- C++基础语法注意细节
- 一次性能调优的经历之慎用表变量和从小结果集获取数据
- 查询练习
- UVA-11903 Just Finish it up
- iOS Masonry的使用需要注意的地方
- Codeforces Round #319 (Div. 2) D
- 5475 An easy problem
- PAT 1002 写出这个数
- 【第4节】Java代码实现栈--小例子--单词逆序
- 正则表达式
- 产品经理的职责
- 产品经理的职责
- 安卓基础——adb相关内容
- 使用P4Merge作为 GIT merge的图形化工具
- 【第4节】栈的Java代码实现,【数组形式存储】