1 条题解

  • 0
    @ 2023-6-11 12:24:20

    C++ :

    #include<bits/stdc++.h>//偷懒专用库
    #define ll long long
    #define INF 110
    #define MAXN 99999//宏定义
    using namespace std;
    
    inline int read(){
      char c=getchar();int x=0,f=1;
      while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
      while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
      return x*f;
    }//快读,可以提供借鉴 
    
    int n,m,ans;//行,列,答案 
    char a[INF][INF];//存图 
    int f[12][2]={{2,0},{-2,0},{0,2},{0,-2},{1,0},{-1,0},{0,1},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}};//这就是找点的数组,画个图就出来了,按照题目给的 
    
    void dfs(int x,int y)//搜索喽 
    {
    	a[x][y]='-';//直接把能到的变成 '-' 
    	for(int p=0;p<12;++p)//一共可以到十二个点,数组也刚好开到11; 
    	 {
    	 	int dx=x+f[p][0];//扩展到的点的横坐标 
    	 	int dy=y+f[p][1];//扩展到的点的纵坐标 
    	 	if(dx>=1&&dx<=n&&dy>=1&&dy<=m&&a[dx][dy]=='#')//满足条件,没超界, 并且是  '#'就搜他 
    	 	 dfs(dx,dy);//搜他 
    	 }
    }
    
    int main()//主函数 
    {
    	n=read();
    	m=read();//读入 
    	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]=='#')//搜到一个图案 
    	  	 {
    	  	 	dfs(i,j);//把这个图变成  '-' 
    	  	 	ans++;//答案加一 ; 
    		 }
    	  }
    	cout<<ans;//输出 
    	return 0;//养成好习惯从你我做起 
    }
    
    • 1

    信息

    ID
    2786
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者