您的位置:首页 > 其它

ACM-POJ 1562 DFS 深度优先搜索

2012-10-05 01:27 483 查看
这里说一下这道题的唯一陷阱就是在输入的时候测试数据 m n后面是有空格的,如果你是用%c读入的话会直接读空格。

#include <iostream>
#include <cstdio>
using namespace std;

int m, n;
char map[100][100];
int move[8][2] = { {-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1} };

void DFS(int si, int sj) {
int i(0);
if (si >= m|| sj >= n || si < 0 ||sj < 0) return ;
for (i = 0; i != 8; ++i) {
int mi = si + move[i][0];
int mj = sj + move[i][1];
if (map[mi][mj] == '@') {
map[mi][mj] = '*';
DFS(mi, mj);
}
}
return ;
}

int main() {
while (scanf("%d%d", &m, &n), m) {

getchar();
int i(0), j(0);
for ( i = 0; i < m; ++i)
scanf("%s", map[i]);

int answer(0);
for (i = 0; i != m; ++i)
for (j = 0; j != n; ++j)
if (map[i][j] == '@') {
map[i][j] = '*';
DFS(i, j);
++answer;
}

printf("%d\n", answer);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: