• nyoj 27水池数目


    水池数目

    时间限制:3000 ms  |  内存限制:65535 KB

    难度:4

    描述

    南阳理工学院校园里有一些小河和一些湖泊,现在,我们把它们通一看成水池,假设有一张我们学校的某处的地图,这个地图上仅标识了此处是否是水池,现在,你的任务来了,请用计算机算出该地图中共有几个水池。

    输入

    第一行输入一个整数N,表示共有N组测试数据
    每一组数据都是先输入该地图的行数m(0<m<100)与列数n(0<n<100),然后,输入接下来的m行每行输入n个数,表示此处有水还是没水(1表示此处是水池,0表示此处是地面)

    输出

    输出该地图中水池的个数。
    要注意,每个水池的旁边(上下左右四个位置)如果还是水池的话的话,它们可以看做是同一个水池。

    样例输入

    2

    3 4

    1 0 0 0

    0 0 1 1

    1 1 1 0

    5 5

    1 1 1 1 0

    0 0 1 0 1

    0 0 0 0 0

    1 1 1 0 0

    0 0 1 1 1

    样例输出

    2

    3

    #include<stdio.h>
    int  grid[100][100];
    int N,m,n;
    int  dir[8][2]={{-1,0},{0,1},{1,0},{0,-1}};
    void DFS(int x,int y)
    {
    	int i,xx,yy;
    	grid[x][y]=0;
    	for(i=0;i<8;i++)
    	{
    		xx=x+dir[i][0];
    		yy=y+dir[i][1];
    		if(xx<0||yy<0||xx>=m||yy>=n)continue;
    		if(grid[xx][yy]==1)
    		DFS(xx,yy);
    	}
    }
    int main()
    {
    	int i,j;
    	scanf("%d",&N);
    	while(N--)
    	{
    		scanf("%d%d",&m,&n);
    		for(i=0;i<m;i++)
    		{
    			for(j=0;j<n;j++)
    			scanf("%d",&grid[i][j]);
    		}
    		int count =0;
    		for(i=0;i<m;i++)
    		{
    			for(j=0;j<n;j++)
    			{
    				if(grid[i][j]==1)
    				{
    					DFS(i,j);
    					count++;
    				}
    			}
    		}
    		printf("%d
    ",count);
    	}
    	return 0;
    }        
    

      

  • 相关阅读:
    扫雷游戏
    打地鼠Demo
    Game2048
    蛇形矩阵
    约瑟夫环
    二分法查找
    动态规划之防卫导弹
    动态规划之0-1背包问题
    回溯算法之火力网
    回溯算法之8皇后问题
  • 原文地址:https://www.cnblogs.com/zhangliu/p/7052595.html
Copyright © 2020-2023  润新知