码迷,mamicode.com
首页 > 其他好文 > 详细

CNUOJ 0079 20612统计八连块

时间:2015-07-17 00:22:55      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

 

20612统计八连块

难度级别:B; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B
试题描述

    输入一个m行n列的字符矩阵,统计字符“@”组成多少个八连块。如果两个字符“@”所在的格子相邻(横竖或者对角线方向),就说它们属于同一个八连块。例如,下图中有两个八连块。
                        技术分享

输入
第一行包括两个正整数m和n,由空格隔开,接下来的m行,每行n个字符,字符只包括“*”和“@”。
输出
一个自然数,表示八连块的个数。
输入示例
5 5
****@
*@@*@
*@**@
@@@*@
@@**@
输出示例
2
其他说明
数据范围:0<m,n<101。NYL出品

     简单的八连块问题,直接用dfs,代码不多说了。

#include<iostream>
#include<cstdio>
using namespace std;
int n,m,ans;
char ch[1005][1005];
bool vis[1005][1005];
void dfs(int x,int y)
{
    if(vis[x][y]==0&&ch[x][y]==@)
    {
        vis[x][y]=1;
        dfs(x+1,y);
        dfs(x,y+1);
        dfs(x-1,y);
        dfs(x,y-1);
        dfs(x+1,y+1);
        dfs(x+1,y-1);
        dfs(x-1,y+1);
        dfs(x-1,y-1);
    }
    return;
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            cin>>ch[i][j];
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            if(vis[i][j]==0&&ch[i][j]==@) {ans++;dfs(i,j);}
    printf("%d",ans);
    //system("pause");
    return 0;
}

 

CNUOJ 0079 20612统计八连块

标签:

原文地址:http://www.cnblogs.com/xiaoshenWXY/p/4652796.html

(0)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!