zoukankan      html  css  js  c++  java
  • 编程算法

    水洼的数量 代码(C)


    本文地址: http://blog.csdn.net/caroline_wendy


    题目: 有一个大小为N*M的园子, 雨后起了积水. 八连通的积水被觉得是连接在一起的. 请求出园子里总共同拥有多少水洼.


    使用深度优先搜索(DFS), 在某一处水洼, 从8个方向查找, 直到找到全部连通的积水. 再次指定下一个水洼, 直到没有水洼为止.

    则全部的深度优先搜索的次数, 就是水洼数. 时间复杂度O(8*M*N)=O(M*N).


    代码:

    /*
     * main.cpp
     *
     *  Created on: 2014.7.12
     *      Author: spike
     */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
    
    class Program {
    	static const int MAX_N=20, MAX_M=20;
    	int N = 10, M = 12;
    	char field[MAX_N][MAX_M+1] = {
    			"W........WW.",
    			".WWW.....WWW",
    			"....WW...WW.",
    			".........WW.",
    			".........W..",
    			"..W......W..",
    			".W.W.....WW.",
    			"W.W.W.....W.",
    			".W.W......W.",
    			"..W.......W."};
    	void dfs(int x, int y) {
    		field[x][y] = '.';
    		for (int dx = -1; dx <= 1; dx++) {
    			for (int dy = -1; dy <= 1; dy++) {
    				int nx = x+dx, ny = y+dy;
    				if (0<=dx&&nx<N&&0<=ny&&ny<M&&field[nx][ny]=='W') dfs(nx, ny);
    			}
    		}
    		return;
    	}
    public:
    	void solve() {
    		int res=0;
    		for (int i=0; i<N; i++) {
    			for (int j=0; j<M; j++) {
    				if (field[i][j] == 'W') {
    					dfs(i,j);
    					res++;
    				}
    			}
    		}
    		printf("result = %d
    ", res);
    	}
    };
    
    
    int main(void)
    {
    	Program P;
    	P.solve();
        return 0;
    }
    
    
    
    


    输出:

    result = 3










  • 相关阅读:
    border-image
    实现页面变成灰色色调
    ie 浏览器“浏览器模式”和“文档模式”之间的区别
    vue-loader
    vue-cli创建的项目中使用sass
    v-html
    vue $forceUpdate 强制更新
    webpack-dev-server 不是内部命令
    vue devtools 以及热更新
    事件机制
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/7091467.html
Copyright © 2011-2022 走看看