zoukankan      html  css  js  c++  java
  • nyoj27水池数目 (DFS)

    水池数目

    时间限制: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
    来源
    [张云聪]原创
    上传者
    张云聪

    先遍历地图 发现水池就深搜。把它旁边的水池所有标记,同一时候水池的数目+1 

    非常easy。只是要记得这个是上下左右四个方向。。不是八个方向0.0.

     
    #include <stdio.h>
    #include <string.h>
    int t,m,n,i,j,count;
    int visit[100][100],a[100][100];
    void dfs(int s1,int s2)
    {
    	if(s1<0||s1==m||s2<0||s2==n||visit[s1][s2]||!a[s1][s2])
    		return ;
    	visit[s1][s2]=1;
    	dfs(s1+1,s2);
    	dfs(s1-1,s2);
    	dfs(s1,s2-1);
    	dfs(s1,s2+1);
    }
    int main()
    {
    	scanf("%d",&t);
    	while(t--)
    	{
    		scanf("%d %d",&m,&n);
    		memset(a,0,sizeof(a));
    		memset(visit,0,sizeof(visit));
    		for(i=0;i<m;i++)
    			for(j=0;j<n;j++)
    				scanf("%d",&a[i][j]);
    		count=0;
    		for(i=0;i<m;i++)
    			for(j=0;j<n;j++)
    			{
    				if(a[i][j]==1&&visit[i][j]==0)
    					count++,dfs(i,j);
    			}
    		printf("%d
    ",count);
    	}
    }        


  • 相关阅读:
    King's Quest
    JavaScript“并非”一切皆对象
    javascript中的style只能取到在HTML中定义的css属性
    jquery中的$(this)和this
    WEB安全字体(Web Safe Fonts)-网页设计用什么字体兼容性好?
    css各种水平垂直居中
    css绘制各种形状
    css3椭圆运动
    通过时间戳控制类
    js中的面向对象程序设计
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7118715.html
Copyright © 2011-2022 走看看