搜索--16

来源:互联网 发布:php 5.4.10.tar.gz 编辑:程序博客网 时间:2024/05/24 22:43

题目大概:

输入n和m,是一个n*m的矩形,里面由*和@组成。找出有几组@。一组@是指,一个@符号在矩形中的八个方向上有@,那这两个@就算一组。

思路:

就是看看这个矩形域内有几团@。显然用深搜,不断查找,直到附近没有了@ 算一组。

但要注意标记记录@是否被计算过。

代码:

#include <iostream>#include <cstring>using namespace std;char map[101][101];int biao[101][101];int dx[8]={1,1,1,-1,-1,-1,0,0},dy[8]={0,1,-1,0,1,-1,1,-1},q,w;int n,m;int s(int f,int g){    for(int i=0;i<8;i++)    {q=f+dx[i];    w=g+dy[i];     if(map[q][w]=='@'&&biao[q][w]==0&&q>=1&&q<=n&&w>=1&&w<=m){biao[q][w]=1;s(q,w);}    }return 0;}int main(){while(cin>>n>>m){if(m==0&&n==0)break;    int sum=0;    memset(biao,0,sizeof(biao));    for(int i=1;i<=n;i++)    {for(int j=1;j<=m;j++)    {cin>>map[i][j];    }    }       for(int i=1;i<=n;i++)    {for(int j=1;j<=m;j++)    {if(map[i][j]=='@'&&biao[i][j]==0){biao[i][j]=1;s(i,j);sum++;}    }    }    cout<<sum<<endl;} return 0;}



0 0
原创粉丝点击