这是标准的dfs搜索问题,问题要求找到所有的油田的个数,油田连在一起的算一个,所以我们可以用遍历的方法,搜到一片油田就将这一片油田变为"*",这样就可以很轻松的A掉了。
代码:
#include <iostream> using namespace std; char arr[101][101]; int m,n,dir[8][2]={{-1,-1},{-1,0},{-1,1},{0,1},{0,-1},{1,-1},{1,0},{1,1}}; void dfs(int i,int j) { for(int q=0;q<8;q++) { int i1=i+dir[q][0]; int j1=j+dir[q][1]; if(i1>=1&&i1<=m&&j1>=0&&j1<n&&arr[i1][j1]=='@') { arr[i1][j1]='*'; dfs(i1,j1); } } } int main() { int num; while(cin>>m>>n &&(m!=0&&n!=0)) { num=0; for(int i=1;i<=m;i++) cin>>arr[i]; for(int i=1;i<=m;i++) for(int j=0;j<=n;j++) { if(arr[i][j]=='@') { arr[i][j]='*'; num++; dfs(i,j); } } cout<<num<<endl; } return 0; }总结:提交之前,因为j的范围是0到n—1,WA了一次,总结起来还是很简单的。
over