1011 Oil Deposits
来源:互联网 发布:win7带网络的安全模式 编辑:程序博客网 时间:2024/05/20 10:16
题意:
上下左右左上右上左下右下只要有一个方向@可以连起来就算是一块,求有多少块油田
思路:
上课讲过的题,用BFS深搜 每找到一个@就搜索它附近所有的@ 并且标记访问函数为1(已经访问过) 访问过的不再访问 每找到一块 总数加一
虽然上课见过了 代码写起来也好麻烦 全是些小错误。。什么终止运行啥的!!。。。。。。真麻烦。。。
#include "stdafx.h"#include<fstream>#include <iostream>#include <cstring> using namespace std;bool visit[110][110]; char a[110][110]; int dir[8][2] = { { -1,0 },{ 1,0 },{ 0,1 },{ 0,-1 },{ -1,-1 },{ -1,1 },{ 1,-1 },{ 1,1 } }; int sum, m, n, sx, sy;bool f(int a, int b) { if (a<1 || a>m || b<1 || b>n)return true; return false;}void dfs(int sx, int sy) { for (int i = 0;i<8;i++) { if (a[sx + dir[i][0]][sy + dir[i][1]] == '*')continue; if (f(sx + dir[i][0], sy + dir[i][1]))continue; if (visit[sx + dir[i][0]][sy + dir[i][1]])continue; visit[sx + dir[i][0]][sy + dir[i][1]] = 1; dfs(sx + dir[i][0], sy + dir[i][1]); }}int main(){ fstream cin("E:/C++/IN/aaa.txt"); while (cin >> m >> n) { sum = 0; if (m == 0)break; memset(visit, 0, sizeof(visit)); for (int i = 1;i <= m;i++) for (int j = 1;j <= n;j++) { cin >> a[i][j]; } for (int i = 1;i <= m;i++) { for (int j = 1;j <= n;j++) { if (a[i][j] == '@'&& !visit[i][j]) { visit[i][j] = 1; dfs(i, j); sum++; } } } cout << sum << endl; } return 0;}
0 0
- 1011 Oil Deposits
- 1011 Oil Deposits
- 1011 Oil Deposits
- 1011-Oil Deposits
- acm 2 1011 Oil Deposits
- 练习二 1011 Oil Deposits
- Oil Deposits
- Oil Deposits
- Oil Deposits
- Oil Deposits
- Oil Deposits
- Oil Deposits
- Oil Deposits
- Oil Deposits
- Oil Deposits
- Oil Deposits
- Oil Deposits
- Oil Deposits
- H5页面快速搭建之高级字体应用实践
- poj 1579 递归-记忆化搜索
- Jupyter notebooks 安装与使用
- 比特币交易平台Kraken获得B轮融资
- java 集合类
- 1011 Oil Deposits
- HBase 默认配置
- Android杀死双进程应用
- jstl简单总结
- ArcGIS Runtime SDK for iOS(六) --- 空间几何分析与操作(中)
- Android API Guides---Searchable Configuration
- Jboss6安全配置(添加/修改 用户和密码)
- Android学习之位图BitMap
- VS2013常用快捷键