ZOJ 1709(BFS_A题)解题报告

Posted caomingpei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZOJ 1709(BFS_A题)解题报告相关的知识,希望对你有一定的参考价值。

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1709

---------------------------------------------------------------------------------------------------------------

题意:‘@‘是油田,上下左右如果出现‘@‘表明是同一片油田,问区域内有几片油田。

思路:出在了广搜的专题,然而还是按照当年第一次接触深搜时的思路写的,如果搜到了,就向上下左右某个方向继续搜索。

代码:

技术分享图片
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
const double PI = acos(-1.0);
const double eps = 1e-6;
int H = 1;
int W = 1;
const int MAXN = 100+5;
int flag[MAXN][MAXN]={0};
char a[MAXN][MAXN]={0};

void search(int i,int j){
    if(a[i][j]!=@||i<0||j<0||i>H||j>W)    return ;
    else{
        a[i][j]=*;
        search(i-1, j-1);  
        search(i-1, j);  
        search(i-1, j+1);  
        search(i, j-1);  
        search(i, j+1);  
        search(i+1, j-1);  
        search(i+1, j);  
        search(i+1, j+1);  
    }
}
int main(void)
{    
    
    while(cin>>H>>W){
        if(H==0&&W==0){    return 0;}
        else{
        int ans = 0;
        for(int i =0;i<H;i++){
            for(int j =0;j<W;j++){
                cin>>a[i][j];
            }
        }
        for(int i =0;i<H;i++){
            for(int j=0;j<W;j++){
                if(a[i][j]==@){
                    search(i,j);
                    ans++;
                }
            }
        }
        printf("%d\n",ans);
        }
    }
}
View Code

 

以上是关于ZOJ 1709(BFS_A题)解题报告的主要内容,如果未能解决你的问题,请参考以下文章

C++解题报告 : 迭代加深搜索之 ZOJ 1937 Addition Chains

zoj3707(Calculate Prime S)解题报告

HDU 1016(DFS_B题)解题报告

解题报告力扣 第 279 场周赛

ZOJ 1709 Oil Deposits(dfs,连通块个数)

解题报告力扣 第 268 场周赛