1. 程式人生 > >ZOJ 1709(BFS_A題)解題報告

ZOJ 1709(BFS_A題)解題報告

std int ring ret stack max bit tor print

題目鏈接: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題)解題報告