POJ1562
来源:互联网 发布:代金券数据库设计 编辑:程序博客网 时间:2024/06/01 10:50
题意是在途中找@块的数量,算上斜方向的。
#include <stdio.h>#include <string.h>#include <stdlib.h>char a[110][110];int vis[110][110];int sizev = sizeof(vis);int cou, m, n;int dir[8][2] = {{1, 0}, {1, -1}, {0,1}, {0,-1}, {-1, 0}, {-1,1}, {1, 1}, {-1,-1}}; ///用数组存放上下左右选项bool check(int x, int y) { if (x >= m || x < 0 || y >= n || y < 0 || vis[x][y]) return false; ///越界与标记过的以后不再走 return true;}void dfs(int x, int y) { int nx, ny; int i; for (i = 0; i < 8; i++) { ///不要用if傻傻地穷举八个方向,代码量太大了 nx = x + dir[i][0]; ny = y + dir[i][1]; if (!check(nx, ny)) continue; vis[nx][ny] = 1; ///标记走过 dfs(nx, ny); ///dfs }}int main(){ int i, j; while (~scanf("%d%d", &m, &n) && m) { getchar(); memset(vis, 0, sizev); for (i = 0; i < m; i++) { scanf("%s", a[i]); ///这个数据用scanf("%c",&a[i][j]);有问题 for (j = 0; j < n; j++) { if (a[i][j] == '*') vis[i][j] = 1; } }#if 0 for (i = 0; i < m; i++) { puts(a[i]); }#endif // 1 cou = 0; for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { if (!vis[i][j]) { ///遍历字符数组找到一个没有标记过的点开始DFS vis[i][j] = 1; dfs(i, j); cou++; ///每次搜完一块之后cou+1 } } } printf("%d\n", cou); ///打印出块数 } return 0;}
0 0
- poj1562
- poj1562
- poj1562
- poj1562
- POJ1562
- poj1562
- poj1562--DFS
- poj1562 poj1088
- POJ1562 dfs水题
- 北大ACM poj1562
- POJ1562:Oil Deposits(DFS)
- poj1562(八个方向dfs)
- poj1562 Oil Deposits
- poj1562 Oil Deposits
- Oil Deposits POJ1562
- poj1562 Oil Deposits BFS
- poj1562 Oil Deposits(DFS)
- POJ1562.Oil Deposits
- Android系统Recovery工作原理之使用update.zip升级过程分析(九)---updater-script脚本语法简介以及执行流程
- Android提示版本更新+notification显示下载进度
- 面试心得与总结---BAT、网易、蘑菇街
- poj 3687 Labeling Balls
- Cocoa编码规范
- POJ1562
- AS3.0的元素处理(三)-- TextFormat
- Linux内核源码分析之文件系统(1) -- 三思而后行
- Visual C++ Tips: 创建 x64 Target
- Android 实现沉浸式状态栏
- 获取系统进程快照 c语言实现
- boost 串口通信 udp rather than Tcp
- struts2开发-validate-表单验证案例1
- [研讨] Shape、Sprite 和 MovieClip 对象的 graphics 属性(graphics类)的简单用法