dfs

来源:互联网 发布:网络照片素材 编辑:程序博客网 时间:2024/04/30 17:07


代码如下:

#include<cstdio> #include <cstring>    #define M 1002char a[M][M];int n,m;int xx[8]={-1,0,1,-1,1,-1,0,1};   int yy[8]={-1,-1,-1,0,0,1,1,1};void DFS(int y, int x){  int i, dx, dy;  for(i = 0; i < 8; i++)  {      dx = x + xx[i];    dy = y + yy[i];    if(dx>=0 && dx<m && dy>=0 && dy<n && a[dy][dx]=='@')    {         a[dy][dx]='*';    //等同于标记为已访问过      DFS(dy,dx);    //递归    }  }}int main(){  int i, j;  while(scanf("%d %d",&n,&m)!=EOF&&n&&m)  {     memset(a, 0, sizeof(a));    //初始化为全没访问过    for(i = 0; i < n; i++)    {      scanf("%s",&a[i]);      }    int count = 0;    for(i = 0; i < n; i++)    {      for(j = 0; j < m; j++)      {        if(a[i][j] == '@')        {           a[i][j] = '*';     //等同于标记为以访问过          count++;          DFS(i, j);      //使用多次        }      }    }    printf("%d\n",count);  }  return 0;}




3 0