欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

POJ1979 Red and Black【DFS】

程序员文章站 2022-05-21 17:49:59
...

水题,直接代码!

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define MAX_M 22
#define MAX_N 22

char m[MAX_M][MAX_N];
int M, N, ans;
//定义四个移动方向
int dx[4] = { 1,-1,0,0};
int dy[4] = { 0,0,1,-1};

void dfs(int x, int y)
{   m[x][y] = '#';  //重置,代表已经访问过!
    ans++;
    for (int i = 0; i < 4; i++)

    {
        int nx = x + dx[i];
        int ny = y + dy[i];
        if (nx >= 0 && nx < M && ny >= 0 && ny < N && m[nx][ny] == '.')
        dfs(nx, ny);
    }
    return;
}
int main()
{
    int i, j;
    int sx, sy;
    while (cin >> N >> M, M || N)
    {
        ans = 0;
        for (i = 0; i < M; i++)
            for (j = 0; j < N; j++)
            {
                cin >> m[i][j];
                if (m[i][j] == '@')
                {
                    sx = i;
                    sy = j;
                    m[i][j] = '.';   //其实不换也行,反正遍历的时候都重置成其他的了。
                }
            }
        dfs(sx, sy);
        cout << ans << endl;
    }
    system("pause");

}









相关标签: dfs poj1979