hdu1241
2015-07-30 20:49
519 查看
搜索
#include <iostream>
#include <string>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <map>
#include <iterator>
#include <cstring>
#include <cmath>
using namespace std;
char maze[105][105];
int m, n;
int num;
int visit[105][105];
int dx[] = {-1,-1,-1,0,0,1,1,1}, dy[] = {-1,0,1,-1,1,-1,0,1};
class point {
public:
int x;
int y;
point(int x, int y) {
this->x = x, this->y = y;
}
};
vector<point> oils;
int isvalid(int x, int y) {
return x >=0 && y >=0 && x <m && y <n && !visit[x][y] && maze[x][y] == '@';
}
void dfs(int x, int y, int initial) {
if (visit[x][y]) {
// printf("(%d, %d) has been visited..\n", x, y);
return;
}
// printf("start dfs at (%d, %d)\n", x, y);
if (initial) {num++;}
// printf("at (%d, %d), num++...\n", x, y);}
visit[x][y] = 1;
int nx, ny;
for (int i = 0; i < 8; i++) {
nx = x+dx[i], ny = y+dy[i];
if (isvalid(nx, ny)) {
// printf("from (%d, %d) to (%d, %d)\n",x, y, nx, ny);
dfs(nx, ny, 0);
}
}
}
int main() {
while (cin >> m >> n && (m||n)) {
oils.clear();
for (int i = 0; i < m; i++) {
cin >> maze[i];
for (int j = 0; j < n; j++) {
if (maze[i][j] == '@')
oils.push_back(point(i,j));
}
}
memset(visit, 0, sizeof(visit));
num = 0;
for (int i = 0; i < oils.size(); i++) {
dfs(oils[i].x, oils[i].y, 1);
}
cout << num << endl;
}
return 0;
}
#include <iostream>
#include <string>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <map>
#include <iterator>
#include <cstring>
#include <cmath>
using namespace std;
char maze[105][105];
int m, n;
int num;
int visit[105][105];
int dx[] = {-1,-1,-1,0,0,1,1,1}, dy[] = {-1,0,1,-1,1,-1,0,1};
class point {
public:
int x;
int y;
point(int x, int y) {
this->x = x, this->y = y;
}
};
vector<point> oils;
int isvalid(int x, int y) {
return x >=0 && y >=0 && x <m && y <n && !visit[x][y] && maze[x][y] == '@';
}
void dfs(int x, int y, int initial) {
if (visit[x][y]) {
// printf("(%d, %d) has been visited..\n", x, y);
return;
}
// printf("start dfs at (%d, %d)\n", x, y);
if (initial) {num++;}
// printf("at (%d, %d), num++...\n", x, y);}
visit[x][y] = 1;
int nx, ny;
for (int i = 0; i < 8; i++) {
nx = x+dx[i], ny = y+dy[i];
if (isvalid(nx, ny)) {
// printf("from (%d, %d) to (%d, %d)\n",x, y, nx, ny);
dfs(nx, ny, 0);
}
}
}
int main() {
while (cin >> m >> n && (m||n)) {
oils.clear();
for (int i = 0; i < m; i++) {
cin >> maze[i];
for (int j = 0; j < n; j++) {
if (maze[i][j] == '@')
oils.push_back(point(i,j));
}
}
memset(visit, 0, sizeof(visit));
num = 0;
for (int i = 0; i < oils.size(); i++) {
dfs(oils[i].x, oils[i].y, 1);
}
cout << num << endl;
}
return 0;
}
相关文章推荐
- 20150727
- 湖南省第八届大学生程序设计大赛原题 C
- GitHub
- Ubuntu 设置Apache虚拟主机
- iOS--日历事件的获取和添加
- GIT 教程
- UIView
- 【Unity3d】Unity3d5.1 + UGUI打IPA包出现KeyNotFoundException异常
- jQuery基本动画效果
- PHP可变长函数方法介绍
- Maven 与 Tomcat7
- 简单导航抽屉(Navigation Drawer)
- 同步和异步有何异同,在什么情况下分别使用他们?
- Express 2015 RC for Windows 10 安装
- 整数因子分解问题 SDUT
- 获取某个月的第一天和最后一天
- MYSQL 日期函数
- 合唱队
- 严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderLis
- 【7.10-7.30】我的“在华信”