• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

plank george

人生豪迈,只不过是重头再来。
  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

第一次DFS尝试

曾经一度惧怕DFS,不敢做题,也没有毅力去努力钻研。感谢我的同学们,他们让我有了尝试的勇气。

这是我做的第一道DFS题目,非常简单,和大家分享一下

http://acmore.net:8080/contest/view.action?cid=6#problem/E

#include<stdio.h>
int n,m,i,k,count;
char a[100][100];
void dfs(int x,int y)//把与一个“@”相连的“@”全部找到并标记
{
    if(a[x][y]=='*'||x<0||y<0||x==n||y==m)return;
    a[x][y]='*';
    dfs(x-1,y-1);
    dfs(x-1,y);
    dfs(x-1,y+1);
    dfs(x,y-1);
    dfs(x,y+1);
    dfs(x+1,y-1);
    dfs(x+1,y);
    dfs(x+1,y+1);
    //putchar('N');
}
int main()
{

    while(~scanf("%d%d%*c",&n,&m)&&n&&m)
    {
        count=0;
        for(i=0;i<n;i++)
            gets(a[i]);
        for(i=0;i<n;i++)
            for(k=0;k<m;k++)
            {
                if(a[i][k]=='@')
                {
                    dfs(i,k);
                    count++;
                }
            }
        printf("%d\n",count);
    }
    return 0;
}

使用油区非油化的思想,可以减少一个数组的使用,使代码简洁。

posted on 2013-03-29 19:45  plank george  阅读(110)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3