首页 > 代码库 > HDU 1241

HDU 1241

 1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4  5 const int MAX=105; 6  7 bool vis[MAX][MAX]; 8 char maze[MAX][MAX]; 9 int n,m;10 int dir[8][2]={0,1,1,0,0,-1,-1,0,1,1,1,-1,-1,1,-1,-1};11 12 bool ok(int i,int j){13     if(!vis[i][j]&&maze[i][j]==@&&i>=0&&i<n&&j>=0&&j<m)14     return true;15     return false;16 }17 18 void dfs(int i,int j){19     int ti,tj;20     for(int k=0;k<8;k++){21         ti=i+dir[k][0];22         tj=j+dir[k][1];23         if(ok(ti,tj)){24             vis[ti][tj]=true;25             dfs(ti,tj);26         }27     }28 }29 30 int main(){31     while(scanf("%d%d",&n,&m)!=EOF){32         if(n==0) break;33         for(int i=0;i<n;i++)34         scanf("%s",maze[i]);35         memset(vis,false,sizeof(vis));36         int ans=0;37         for(int i=0;i<n;i++){38             for(int j=0;j<m;j++)39             if(maze[i][j]==@&&!vis[i][j]){40                 ans++;41                 dfs(i,j);42             }43         }44         printf("%d\n",ans);45     }46     return 0;47 }
View Code