hdu1241(最简单的搜索)

来源:互联网 发布:c语言初学者题目 编辑:程序博客网 时间:2024/06/05 21:56

这是标准的dfs搜索问题,问题要求找到所有的油田的个数,油田连在一起的算一个,所以我们可以用遍历的方法,搜到一片油田就将这一片油田变为"*",这样就可以很轻松的A掉了。

代码:

#include <iostream>using namespace std;char arr[101][101];int m,n,dir[8][2]={{-1,-1},{-1,0},{-1,1},{0,1},{0,-1},{1,-1},{1,0},{1,1}};void dfs(int i,int j){    for(int q=0;q<8;q++)    {        int i1=i+dir[q][0];        int j1=j+dir[q][1];        if(i1>=1&&i1<=m&&j1>=0&&j1<n&&arr[i1][j1]=='@')        {            arr[i1][j1]='*';            dfs(i1,j1);        }    }}int main(){    int num;    while(cin>>m>>n &&(m!=0&&n!=0))    {        num=0;       for(int i=1;i<=m;i++)            cin>>arr[i];       for(int i=1;i<=m;i++)            for(int j=0;j<=n;j++)       {           if(arr[i][j]=='@')           {               arr[i][j]='*';               num++;               dfs(i,j);           }       }       cout<<num<<endl;    }    return 0;}
总结:提交之前,因为j的范围是0到n—1,WA了一次,总结起来还是很简单的。

over

原创粉丝点击