//这题属于简单的搜索题,可以分别用bfs和dfs来做!
#include <iostream>
#include <cstdio>
#include <string>
#include <queue>
using namespace std;
const int MAX = 25;
char map[MAX][MAX];
int i, j, w, h;
int dir[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
void init()
{
for (i = 0; i < h; i++){
for (j = 0; j < w; j++){
//scanf("%c", &map[i][j]);
cin >> map[i][j];
}
}
return ;
}
void print()
{
for (i = 0; i < h; i++){
for (j = 0; j < w; j++)
cout << map[i][j];
cout << endl;
}
}
int find()
{
int pos;
for (i = 0; i < h; i++){
for (j = 0; j < w; j++){
if (map[i][j] == '@'){
pos = i * w + j;
break;
}
}
}
return pos;
}
void bfs(int start)
{
//cout << start << endl;
int x, y, tmp1, tmp2, tmpx, tmpy, ans = 1;
queue<int> q;
q.push(start);
while (q.size() != 0){
tmp1 = q.front();
q.pop();
x = tmp1 / w;
y = tmp1 % w;
//cout << x << " " << y << endl;
for (i = 0; i < 4; i++){
tmpx = x + dir[i][0];
tmpy = y + dir[i][1];
if (tmpx < h && tmpx >= 0 && tmpy >= 0 && tmpy < w && map[tmpx][tmpy] == '.'){
map[tmpx][tmpy] = '#';
ans++;
tmp2 = tmpx * w + tmpy;
q.push(tmp2);
}
}
}
cout << ans << endl;
}
int main()
{
while (scanf("%d%d", &w, &h)){
if (w == 0 && h == 0) break;
init();
//print();
bfs(find());
}
system("pause");
}
#include <iostream>
#include <cstdio>
using namespace std;
char map[25][25];
int w, h, x, y, ans;
int dir[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
void init()
{
int i, j;
for (i = 0; i < h; i++){
getchar();
for (j = 0; j < w; j++){
scanf("%c", &map[i][j]);
if (map[i][j] == '@'){
x = i;
y = j;
}
}
}
return ;
}
void dfs(int m, int n)
{
int i, tmpx, tmpy;
ans++;
map[m][n] = '#';
for (i = 0; i < 4; i++){
tmpx = m + dir[i][0];
tmpy = n + dir[i][1];
if (tmpx >= 0 && tmpx < h && tmpy >= 0 && tmpy < w && map[tmpx][tmpy] == '.')
dfs(tmpx, tmpy);
}
}
int main()
{
while (scanf("%d%d", &w, &h)){
if (w == 0 && h == 0) break;
ans = 0;
init();
dfs(x, y);
cout << ans << endl;
}
system("pause");
}
poj 1979 Red and Black
最新推荐文章于 2022-10-30 20:09:58 发布