题目链接: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); } } }