当前位置:编程学习 > C/C++ >>

uva_572 - Oil Deposits

 
[cpp] 
/* 题目大意:一块区域中分布着油田,连在一起就属于一个油田,求油田个数。
 * 也就是求一个无向图的连通分支个数,直接dfs8个方向,水过。。。
*/ 
#include <cstdio> 
#include <cstring> 
#include <algorithm> 
using namespace std; 
 
#define MAX 101 
#define DIR 8 
 
char a[MAX][MAX]; 
int visited[MAX][MAX]; 
int dir[][2] = {  www.zzzyk.com
    {-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, 
    {0, 1}, {1, -1}, {1, 0}, {1, 1} 
}; 
 
void DFS(int x, int y){ 
    if( visited[x][y] || a[x][y] == '*' ) return ; 
    visited[x][y] = 1; 
    for(int i = 0; i < DIR; i ++) 
        DFS(x+dir[i][0], y+dir[i][1]); 

 
int main(int argc, char const *argv[]) 

#ifndef ONLINE_JUDGE 
        freopen("test.in", "r", stdin); 
#endif 
    int m, n, ans; 
    while( scanf("%d %d", &m, &n), m || n ){ 
        ans = 0; 
        memset(a, '*', sizeof(a)); 
        memset(visited, 0, sizeof(visited)); 
 
        for(int i = 0; i < m; i ++){ 
            getchar(); 
            for(int j = 0; j < n; j ++){ 
                scanf("%c", &a[i][j]); 
            } 
        } 
        for(int i = 0; i < m; i ++){ 
            for(int j = 0; j < n; j ++){ 
                if( a[i][j] == '@' && !visited[i][j] ){ 
                    ans ++; 
                    DFS(i, j); 
                } 
            } 
        } 
        printf("%d\n", ans); 
    } 
    return 0; 

 

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,