HDU 1241 油田问题(DFS搜连通块

    科技2026-01-06  11

    题目链接

    题目大意:

    一块 m * n 的土地,搜连在一块的 @ 油田 , 八个方向

    解题思路:

    找到一个 @  就 ans++, 然后将它变成 *  ,再从它的八个方向开始搜

    代码如下:

    #include<iostream> #include<cstring> using namespace std; char a[110][110]; int n,m; int ans=0; int d[8][2]={{-1,0},{1,0},{0,-1},{0,1},{-1,-1},{1,1},{1,-1},{-1,1}}; void dfs(int x,int y) { for(int i=0;i<8;i++) { int xx=x+d[i][0]; int yy=y+d[i][1]; if(xx>=0&&yy>=0&&xx<m&&yy<n&&a[xx][yy]=='@') { a[xx][yy]='*'; dfs(xx,yy); } } } int main() { int i,j; while(cin>>m>>n) { if(m==0) break; ans=0; for(i=0;i<m;i++) for(j=0;j<n;j++) cin>>a[i][j]; for(i=0;i<m;i++) { for(j=0;j<n;j++) { if(a[i][j]=='@') { ans++; a[i][j]='*'; dfs(i,j); } } } cout<<ans<<endl; } return 0; }

     

    Processed: 0.011, SQL: 9