poj 2386 lake counting

    xiaoxiao2025-04-12  10

    此题为搜索入门题

    题意为求W连成一片的片数

    思路:搜索W,ans++,再把上下左右左上左下右上右下的W标记,下次就搜不到这个了;

    用的是最烂的的打表深搜

    #include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> using namespace std; char a[110][110]; int p[110][110],sum; void dfs(int i,int j){ p[i][j]=0; if(p[i+1][j]==1){ dfs(i+1,j); } if(p[i-1][j]==1){ dfs(i-1,j); } if(p[i][j-1]==1){ dfs(i,j-1); } if(p[i][j+1]==1){ dfs(i,j+1); } if(p[i+1][j+1]==1){ dfs(i+1,j+1); } if(p[i+1][j-1]==1){ dfs(i+1,j-1); } if(p[i-1][j+1]==1){ dfs(i-1,j+1); } if(p[i-1][j-1]==1){ dfs(i-1,j-1); } } int main(){ int i,j,k,m,n; cin>>m>>n; getchar(); for(i=1;i<=m;i++) for(j=1;j<=n;j++){ cin>>a[i][j]; if(a[i][j]=='W')p[i][j]=1; } for(i=1;i<=m;i++) for(j=1;j<=n;j++){ if(p[i][j]==1){ dfs(i,j); sum++; } } cout<<sum<<endl; return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-1298006.html
    最新回复(0)