zoukankan      html  css  js  c++  java
  • 【DFS练习】【最大的蛋糕块】-C++

    在这里插入图片描述
    这道题目是一个基本的dfs模板(?)下面日常贴一波dfs的基本模板:

    void dfs()//参数用来表示状态  
    {  
        if(到达终点状态)  
        {  
            ...//根据题意添加  
            return;  
        }  
        if(越界或者是不合法状态)  
            return;  
        if(特殊状态)//剪枝
            return ;
        for(扩展方式)  
        {  
            if(扩展方式所达到状态合法)  
            {  
                修改操作;//根据题意来添加  
                标记;  
                dfs();  
                (还原标记);  
                //是否还原标记根据题意  
                //如果加上(还原标记)就是 回溯法  
            }  
        }  
    }  
    
    

    这道题的思路是:先输入,然后遍历一遍原图,如果遇到#(蛋糕)就向四周扩散,同一块蛋糕全部变成’.’,然后cnt++,最后输出就可以了。直接改原图,不需要转换成01矩阵会简单一些。
    代码:

    #include<bits/stdc++.h>
    using namespace std;
    int cnt=0;
    char a[1010][1010];
    int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
    bool visited[1010][1010];
    void dfs(int x,int y)
    {
    	visited[x][y]=1;
    	a[x][y]='.';
    	cnt++;
    	for(int i=0;i<4;i++)
    	{
    		int tx=x+dir[i][0];
    		int ty=y+dir[i][1];
    		if(a[tx][ty]=='#')
    		{
    			dfs(tx,ty);
    		}
    	}
    }
    int main()
    {
    	int n,m,ans=0;
    	cin>>n>>m;
    	for(int i=1;i<=n;i++)
    	{
    		for(int j=1;j<=m;j++)
    		{
    			cin>>a[i][j];
    		}
    	}
    	for(int i=1;i<=n;i++)
    	{
    		for(int j=1;j<=m;j++)
    		{
    			if(a[i][j]=='#')
    			{
    				cnt=0;
    				dfs(i,j);
    				ans=max(ans,cnt);
    			}
    		}
    	}
    	cout<<ans<<endl;
    }
    
    个人博客地址: www.moyujiang.com 或 moyujiang.top
  • 相关阅读:
    hibernate的dialect大全
    jdbc.properties 链接各类数据库的基本配置以及URL写法
    Springboot中redis的学习练习
    博客开通了
    Java String类的hashCode()函数
    Java String类中CaseInsensitiveComparator.compare()方法的实现
    git pull远程所有分支
    Python的权限修饰符
    Tmux快捷键
    __future__模块
  • 原文地址:https://www.cnblogs.com/moyujiang/p/11167741.html
Copyright © 2011-2022 走看看