非递归 # include<iostream> # include<string> using namespace std; string map[100]; int mark[100][100]; struct oil { int x; int y; }; int dir[8][2]={0,-1,0,1,-1,0,1,0,1,1,1,-1,-1,1,-1,-1}; oil arr[10000]; int main() { int m,n; int x,y,a,b; while(cin>>m>>n&&m) { for(int k=0;k<m;k++) cin>>map[k]; int num=0; memset(mark,0,sizeof(mark)); for(int i=0;i<m;i++) for(int j=0;j<n;j++) { if(map[i][j]=='@'&&mark[i][j]==0) { arr[0].x=j;arr[0].y=i; mark[i][j]=1; a=b=0; while(a<=b) { for(int d=0;d<8;d++) { x=arr[a].x+dir[d][0]; y=arr[a].y+dir[d][1]; if(x>=0&&x<n&&y>=0&&y<m&&map[y][x]=='@'&&mark[y][x]==0) { b++; mark[y][x]=1; arr[b].x=x; arr[b].y=y; } } a++; } num++; } } cout<<num<<endl; }
献给亲爱的班长同学 !!~(阮同学)初学者 传说中的勘探油田(DFS) Problem : 1241 ( Oil Deposits ) Judge Status : Accepted RunId : 3708968 Language : C++ Author : zjut11018 Code Render Status : Rendered By HDOJ C++ Code Render Version 0.01 Beta #include<stdio.h> #include<iostream> #include<cstring> using namespace std; char map[100][100]; int dir[8][2]={-1,-1,-1,0,-1,1,0,-1,0,1,1,-1,1,0,1,1},vis[100][100]; int n,m,ans; void DFS(int i,int j) { vis[i][j]=1; for(int k=0;k<8;k++) { int x=i+dir[k][0]; int y=j+dir[k][1]; if(x>=0&&x<n&&y>=0&&y<m&&!vis[x][y]&&map[x][y]=='@') { DFS(x,y); } } return; } int main() { while(cin>>n>>m) { if(!n&&!m)break; for(int i=0;i<n;i++) scanf("%s",&map[i]); ans=0; memset(vis,0,sizeof(vis)); for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(!vis[i][j]&&map[i][j]=='@') { ans++; DFS(i,j); } printf("%d\n",ans); } }