POJ_1979_dfs

Posted 冷暖知不知

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ_1979_dfs相关的知识,希望对你有一定的参考价值。

题目描述:

  每组数据给你一张字符的图,‘@‘代表起点,‘.‘代表可走的路,‘#‘代表墙,求从起点出发,可到达的位置的数量,包括起点。

思路:

  dfs基础题,从起始点开始,每一次所在的点,只要不出界并且字符为‘@‘或‘.‘,则把这个点的字符改为一个标志,再向四周扩散。如果出了边界或者遇到‘#‘,则这条路到尽头。

  最后只要遍历整张图,统计标志的数量即可。

  好像有点不道德,直接把原图修改了= =

 

#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
string a[25];
int H,W,dir[][2] ={{0,-1},{0,1},{1,0},{-1,0}};

void dfs(int x,int y)
{
    if(x < 0 || x >= H || y < 0 || y >= W)  return;
    if(a[x][y] == . || a[x][y] == @)
    {
        a[x][y] = 1;
        for(int i = 0;i < 4;i++)
        {
            int xx = x+dir[i][0],yy = y+dir[i][1];
            dfs(xx,yy);
        }
    }
}

int main()
{
    while(cin >> W >> H && W && H)
    {
        int beginx,beginy;

        for(int i = 0;i < H;i++)
        {
            cin >> a[i];
        }
        for(int i = 0;i < H;i++)
        {
            for(int j = 0;j < W;j++)
            {
                if(a[i][j] == @)
                {
                    beginx = i;
                    beginy = j;
                }
            }
        }
        dfs(beginx,beginy);
        int sum = 0;
        for(int i = 0;i < H;i++)
        {
            for(int j = 0;j < W;j++)
            {
                if(a[i][j] == 1)    sum++;
            }
        }
        cout << sum << endl;
    }
    return 0;
}

 

以上是关于POJ_1979_dfs的主要内容,如果未能解决你的问题,请参考以下文章

POJ 1979 DFS

POJ1979

[dfs] [FloodFill] POJ1979 Red And Black

POJ 1979 Red and Black(DFS)

POJ 1979 Red and Black(简单DFS)

11.17 dfs poj1979 Red and Black