ZOJ 1709(BFS_A題)解題報告
阿新 • • 發佈:2018-01-28
std int ring ret stack max bit tor print
題目鏈接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1709
---------------------------------------------------------------------------------------------------------------
題意:‘@‘是油田,上下左右如果出現‘@‘表明是同一片油田,問區域內有幾片油田。
思路:出在了廣搜的專題,然而還是按照當年第一次接觸深搜時的思路寫的,如果搜到了,就向上下左右某個方向繼續搜索。
代碼:
#include<cstdio> #includeView Code<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> usingnamespace 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); } } }
ZOJ 1709(BFS_A題)解題報告