zoukankan      html  css  js  c++  java
  • 【深搜(DFS)-例题-踏青】-C++

    描述
    
    小白和他的朋友周末相约去召唤师峡谷踏青。他们发现召唤师峡谷的地图是由一块一块格子组成的,有的格子上是草丛,有的是空地。草丛通过上下左右 4 个方向扩展其他草丛形成一片草地,任何一片草地中的格子都是草丛,并且所有格子之间都能通过上下左右连通。如果用'#'代表草丛,'.'代表空地,下面的峡谷中有 2 片草地。
    
    ##..
    
    ..##
    
    处在同一个草地的 2 个人可以相互看到,空地看不到草地里面的人。他们发现有一个朋友不见了,现在需要分头去找,每个人负责一片草地,想知道他们至少需要多少人。
    
    
    输入
    第一行输入 n, m (1 ≤ n,m ≤ 100) 表示峡谷大小。
    
    接下来输入 n 行字符串表示峡谷的地形。
    
    
    输出
    输出至少需要多少人。
    
    
    输入样例 1 
    
    5 6
    .#....
    ..#...
    ..#..#
    ...##.
    .#....
    输出样例 1
    
    5
    

    这道题是一道很典型的深搜(废话)
    那么为什么会考虑使用深搜呢?
    再认真看题目一遍(如果不是纯粹为了来拿代码的最好这么做)

    好的,这道题目看清题意之后,就是要输出有多少片草丛!
    而草丛就是由一块或者几块相邻的草来构成的
    注意!必须是相邻的!
    这里的相邻,指的是四周的四个方向。
    那么就是一道很典型的深搜了(这次不是废话)

    怎么搜?
    先把原图输入,然后双重循环过一遍,发现’#‘字符就把它打成普通的’.’,然后向四周扩展,如果找到草就再循环操作,直到这个草所在的草丛里的所有草都变成了空地,然后ans++。
    代码实现就很简单了(DFS的代码一般都较短)

    代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    char s[110][110];
    int n,m,sum;
    int dir[4][2] = {{1,0}, {0,1}, {-1,0},{0,-1}};
    int vis[110][110];//={0};
    void dfs(int x,int y){
    	int tx,ty;
    	for(int i=0;i<4;i++){
    		tx=x+dir[i][0];
    		ty=y+dir[i][1];
    		if(tx>=0&&tx<n&&ty>=0&&ty<m&&vis[tx][ty]==0&&s[tx][ty]=='#'){
    			vis[tx][ty]=1;
    			dfs(tx,ty);
    		}
    	}
    } 
    int main()
    {
    	cin >>n>>m;	
    	sum=0;
    	for(int i=0;i<n;i++)
    	{
        	cin>>s[i];
    	} 
    	for(int i=0;i<n;i++)
    	{
    		for(int j=0;j<m;j++)
    		{
    			if(s[i][j]=='#'&&!vis[i][j])
    			{
    				vis[i][j]=1;
    				dfs(i,j);
    				sum++;
    			}	
    		} 
    	} 
    	cout<<sum;
    	return 0;
    }
    

    ov.

    个人博客地址: www.moyujiang.com 或 moyujiang.top
  • 相关阅读:
    CentOS 中安装和更新 git 客户端工具
    Python 快速入门笔记(2):数据类型
    Python 快速入门笔记(1):简介
    JavaScript快速入门笔记(15):Web storage 之 localStorage 和 sessionStorage
    JavaScript快速入门笔记(14):session
    JavaScript快速入门笔记(13):cookie
    JavaScript快速入门笔记(12):Ajax之XMLHttpRequest、jQuery、fetch()
    JavaScript快速入门笔记(11):事件处理
    python的线程和进程
    python中字符串编码转换
  • 原文地址:https://www.cnblogs.com/moyujiang/p/11167756.html
Copyright © 2011-2022 走看看