poj 1562 Oil Deposits

来源:互联网 发布:禅道 linux 启动 编辑:程序博客网 时间:2024/06/07 01:06

(1)类型:深搜。
(2)题意:此题与poj2386题非常类似。‘@’表示油田,与‘@’的八面有连接‘@’的与当前油田合并,代表一个油田。问一共有多少个油田。
(3)解题思路:从第一个搜索到的‘@’出发,搜索到八个方向的‘@’,一直搜索到没有‘@’为止,代表一个油田。搜索过的油田做标记。深度搜索即可。
(4)时间复杂度:O(m*n);
(5)总结:此类题型为深搜水题,但是也是做了很多个才能自己手打出来。今后看到这种类似于“水洼”的题目。要快准狠,想到思路,打出模板即可。
(6)代码:

#include<iostream>const int MAX_N=1e2+6;using namespace std;int n,m;char field[MAX_N][MAX_N];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(nx>=0&&nx<n&&ny>=0&&ny<m&&field[nx][ny]=='@')dfs(nx,ny);        }    return ;}void solve(){    int res=0;    for(int i=0;i<n;i++)        for(int j=0;j<m;j++)            if(field[i][j]=='@'){dfs(i,j);res++;}    cout<<res<<endl;}int main(){    ios::sync_with_stdio(false);cin.tie(0);    while(cin>>n>>m,n,m){        for(int i=0;i<n;i++)            for(int j=0;j<m;j++)cin>>field[i][j];        solve();    }}
原创粉丝点击