• 深搜-油田合并


    题意:N*M的图中有一些'@',从该位置往四周8个位置延伸,求共有多少块互不连通的‘@’构成的块?简单的dfs便能搞定。。。

    输入:

    1 1 * 3 5 *@*@* **@** *@*@* 1 8 @@****@* 5 5 ****@ *@@*@ *@**@ @@@*@ @@**@ 0 0

    输出:

    0 1 2 2

    代码:

    复制代码
    #include<iostream>
    using namespace std;
    
    char map[101][101]; //定义地图 map[][],标记油田状况 
    int dir[8][2]={{-1,-1},{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1}}; //搜索8个方向 
    int n,m,num; //表示输入的地图有n行m列
    //深度优先搜索 
    int dfs(int x,int y)
    {
         int a,b,k;
         map[x][y]='*'; //访问过的都由@改为*,剪枝 
         for(k=0;k<8;++k)
         {
              a=x+dir[k][0];
              b=y+dir[k][1];
              if(a<n&&a>=0&&b<m&&b>=0&&map[a][b]=='@')
                  dfs(a,b);
         }
         return 1; //每次递归都返回1,最后表示有多少连通块 
    }
    int main()
    {
        int i,j;
        while(cin>>n>>m)
        {
            if(n==0) break;
            num=0;
            for(i=0;i<n;++i)
                cin>>map[i];
            for(i=0;i<n;++i)
               for(j=0;j<m;++j)
                   if(map[i][j]=='@')
                       num+=dfs(i,j);
            cout<<num<<endl;
        }
        return 0; 
    } 
  • 相关阅读:
    Web开发人员需知的Web缓存知识
    SQLServer常见性能问题
    C#面试常见题
    SQL Server数据库大型应用解决方案总结
    asp.net 缓存
    asp.net 的页面几种传值方式
    C# 连接SQL数据库以及操作数据库
    变量命名规则
    C# 委托
    删除文件
  • 原文地址:https://www.cnblogs.com/xiaoying1245970347/p/3172054.html
Copyright © 2020-2023  润新知