zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    Jquery揭秘系列:实现$.fn.extend 和$.extend函数
    小谈Jquery框架
    js实现可拖动Div
    WebApp 九宫格抽奖简易demo
    原生js实现autocomplete插件
    扩展RadioButtonListFor和CheckBoxListFor
    关于js的回调函数的一点看法
    原生js实现fadein 和 fadeout
    QlikView sheet权限
    asp.net MVC 文件流导出Excel
  • 原文地址:https://www.cnblogs.com/zhurb/p/5836640.html
Copyright © 2011-2022 走看看