码迷,mamicode.com
首页 > 其他好文 > 详细

ZOJ 1709(BFS_A题)解题报告

时间:2018-01-28 20:01:09      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:区域   代码   acm   stack   左右   isp   opened   分享   include   

题目链接: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题)解题报告

标签:区域   代码   acm   stack   左右   isp   opened   分享   include   

原文地址:https://www.cnblogs.com/caomingpei/p/8372143.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!