zoukankan      html  css  js  c++  java
  • 洛谷P1451 求细胞数量

    求细胞数量

    题目链接

    这道题大概是一个最简单的联通块的题了qwq

    • 注意枚举起点的时候 一定不要从0开始不然你就会从0进入到了其他联通块中从而多查。
    • 一定看清题意这道题不是同色为联通块!!!
      AC代码如下:
      其实里面联通块没有必要被涂成不同的颜色,所以也可以全部涂成一个颜色
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<queue>
    #define MAXN 3000
    #define MEXN 100010
    using namespace std;
    int G[MAXN][MAXN];
    int done[MAXN][MAXN];
    int color=1;
    struct item
    {
    	int x;
    	int y;
    	
    };
    queue<item>q;
    int m,n;
    void bfs(item t)
    {
    	q.push(t);
    	while(!q.empty()){
    		item r;
    		r=q.front();
    	//	printf( "x: %d, y: %d
    ", r.x, r.y );
    		// cout<<r.x<<endl;
    		// cout<<r.y<<endl;
    		q.pop();
    		if(done[r.x][r.y]!=0) continue;
    		done[r.x][r.y]=color;
    		if(G[r.x+1][r.y]!=0&&r.x+1<=m&&done[r.x+1][r.y]==0){
    			item t2;
    			t2.x=r.x+1;
    			t2.y=r.y;
    			q.push(t2);
    		} 
    		if(G[r.x-1][r.y]!=0&&r.x-1>=1&&done[r.x-1][r.y]==0){
    			item t2;
    			t2.x=r.x-1;
    			t2.y=r.y;
    			q.push(t2);
    		} 
    		if(G[r.x][r.y+1]!=0&&r.y+1<=n&&done[r.x][r.y+1]==0){
    			item t2;
    			t2.x=r.x;
    			t2.y=r.y+1;
    			q.push(t2);
    		} 
    		if(G[r.x][r.y-1]!=0&&r.y-1>=1&&done[r.x][r.y-1]==0)
    		{
    			item t2;
    			t2.x=r.x;
    			t2.y=r.y-1;
    			q.push(t2);
    		} 
    	}
    }
    int main()
    {
    	
    	scanf("%d%d",&m,&n);
    	for(int i=1;i<=m;i++)
    	{
    		for(int j=1;j<=n;j++)
    		{
    			char c;
    			scanf( " %c", &c );
    			// cin>>c;
    			G[i][j]=c-'0';
    		}
    	}
    //	for(int i=1;i<=m;i++)
    //	{
    //		for(int j=1;j<=n;j++)
    //		{
    //			printf("%d ",G[i][j]);
    //		}
    //		cout<<endl; 
    //	}
    	int cnt=0;
    	for(int i=1;i<=m;i++)
    	{
    		for(int j=1;j<=n;j++)
    		{
    			if(G[i][j]==0)continue;
    			item t;
    			t.x=i;
    			t.y=j;
    			if(done[i][j]==0)
    			{
    				cnt++;
    				color++;
    				bfs(t);
    			}	
    		}
    	}
    	printf("%d",cnt);
    	return 0;
    }
    
  • 相关阅读:
    调用外部文件(ShellExecute)
    字体函数 -- GetDeviceCaps
    字体函数 -- EnumFonts
    字体函数 -- EnumFontFamilies
    回调函数 EnumFontFamProc
    AlphaBlend
    c# 编程修改 wince 系统时间
    windows 打开文件夹
    C# wince 实现软件忙鼠标状态改变
    CSDN第一期总结之三:Thread的问题(转)
  • 原文地址:https://www.cnblogs.com/LITTLESUNwl/p/10673589.html
Copyright © 2011-2022 走看看