题目:忘题戳这
分析:一道典型的dfs,通过‘@’进入搜索,遇到‘.’ 且第一次经过 就继续dfs。
不过要注意题目是要求先输入列,再输入行。
上代码:
#include<iostream>
#include<cstring>
using namespace std;
int sum;
char pic[25][25];
bool visit[25][25];
void dfs(int i, int j) {
visit[i][j] = 1;//标记这个点走过
//四个方向,满足条件(为‘.’ 且第一次经过)则进入dfs。
if (pic[i][j + 1] == '.' && visit[i][j + 1] == 0) { sum++; dfs(i, j + 1); }
if (pic[i][j - 1] == '.' && visit[i][j - 1] == 0) { sum++; dfs(i, j - 1); }
if (pic[i + 1][j] == '.' && visit[i + 1][j] == 0) { sum++; dfs(i + 1, j); }
if (pic[i - 1][j] == '.' && visit[i - 1][j] == 0) { sum++; dfs(i - 1, j); }
}
int main() {
while (1) {
int row, col; cin >> row >> col;
if (row == 0 && col == 0) break;
memset(pic, 0, sizeof(pic));
memset(visit, 0, sizeof(visit));
for (int i = 1; i <= col; i++) {
for (int j = 1; j <= row; j++) {
cin >> pic[i][j];
}
}
sum = 0;//全局变量的计数器
for (int i = 1; i <= col; i++) {
for (int j = 1; j <= row; j++) {
if (pic[i][j] == '@') {//进入搜索
sum++; dfs(i, j);
}
}
}
cout << sum << endl;
}
return 0;
}
感谢阅读!!!