Oil Deposits 圖的遍歷
Output are adjacent horizontally, vertically, or diagonally. An oil deposit will not contain more than 100 pockets. Sample Input
1 1 * 3 5 *@*@* **@** *@*@* 1 8 @@****@* 5 5 ****@ *@@*@ *@**@ @@@*@ @@**@ 0 0Sample Output
0 1 2 2
註意是八個方向相鄰,找連通分支
代碼:
#include <iostream> #include <cstdio> #include <cstring> #include <map> using namespace std; int n,m,vis[100][100]; char ma[100][100]; int dir[8][2]={0,1,1,0,0,-1,-1,0,1,1,1,-1,-1,1,-1,-1}; void dfs(int x,int y) { if(x<0||y<0||x>=n||y>=m||vis[x][y]||ma[x][y]!=‘@‘)return; vis[x][y]=1; for(int i=0;i<8;i++) { int tx=x+dir[i][0]; int ty=y+dir[i][1]; dfs(tx,ty); } } int main() { //ios::sync_with_stdio(false); //cin.tie(0); while(cin>>n>>m&&(n+m)) {int cou=0; map<int,int> num; memset(vis,0,sizeof(vis)); for(int i=0;i<n;i++) cin>>ma[i]; for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(ma[i][j]==‘@‘&&!vis[i][j]) { dfs(i,j); cou++; } cout<<cou<<endl; } }
Oil Deposits 圖的遍歷