• POJ 2386 Lake Counting 搜索题解


    简单的深度搜索就能够了,看见有人说什么使用并查集,那简直是大算法小用了。

    由于能够深搜而不用回溯。故此效率就是O(N*M)了。

    技巧就是添加一个标志P,每次搜索到池塘,即有W字母,那么就觉得搜索到一个池塘了,P值为真。

    搜索过的池塘不要反复搜索,故此,每次走过的池塘都改成其它字母。如'@',或者'#',随便一个都能够。

    然后8个方向搜索。

    #include <stdio.h>
    #include <vector>
    #include <string.h>
    #include <algorithm>
    #include <iostream>
    #include <string>
    #include <limits.h>
    #include <stack>
    #include <queue>
    #include <set>
    #include <map>
    using namespace std;
    const int MAX_N = 101;
    char pond[MAX_N][MAX_N];
    const char VIS = '@';
    int N, M;
    bool P;
    
    inline bool isLegal(int r, int c)
    {
    	return 0<=r && 0<=c && r<N && c<M && pond[r][c] == 'W';
    }
    
    void getPond(int r, int c)
    {
    	if (!isLegal(r, c)) return ;
    	P = true;
    	pond[r][c] = VIS;
    	getPond(r+1, c);
    	getPond(r-1, c);
    	getPond(r, c+1);
    	getPond(r, c-1);
    	getPond(r+1, c+1);
    	getPond(r+1, c-1);
    	getPond(r-1, c+1);
    	getPond(r-1, c-1);//eight direction search
    }
    
    int main()
    {
    	while (~scanf("%d %d", &N, &M))
    	{
    		getchar();
    		for (int i = 0; i < N; i++)
    		{
    			gets(pond[i]);
    		}
    		int ans = 0;
    		for (int i = 0; i < N; i++)
    		{
    			for (int j = 0; j < M; j++)
    			{
    				P = false;
    				getPond(i, j);
    				ans += P;
    			}
    		}
    		printf("%d
    ", ans);
    	}
    	return 0;
    }



  • 相关阅读:
    Spark基本架构及原理
    深度剖析Spark分布式执行原理
    Spark的集群管理器
    基于Redis的开源分布式服务Codis
    RabbitMQ 概念
    分布式事务实现
    优酷 视频上传服务
    深入解析Java中volatile关键字的作用
    mysql in查询 结果乱序 引发的思考
    不安装oracle客户端,用plsql连接oracle
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/6779944.html
Copyright © 2020-2023  润新知