2010年山东省第一届ACM大学生程序设计竞赛——Balloons

来源:互联网 发布:sql注入绕过安全狗asp 编辑:程序博客网 时间:2024/05/16 00:44

DFS水题。打选拔赛时的一个题,当时还没有开数据结构,所以没做上,今天看了看真是不难,AC掉了,也算是正式开图题的一个吧~~~

代码如下:

#include<iostream>#include<cstring>#include<cstdlib>#include<cstdio>#include<cmath>#include<string>using namespace std;char a[100+2][100+2];int flag_s[100+2][100+2],flag_k[100+2][100+2];int DFS_S(int x,int y){    if(!(a[x][y]-'0')||flag_s[x][y])        return 1;    flag_s[x][y]=1;    DFS_S(x-1,y);    DFS_S(x,y-1);    DFS_S(x+1,y);    DFS_S(x,y+1);}int DFS_K(int x,int y){    if(!(a[x][y]-'0')||flag_k[x][y])        return 1;    flag_k[x][y]=1;    DFS_K(x-1,y);    DFS_K(x,y-1);    DFS_K(x+1,y);    DFS_K(x,y+1);    DFS_K(x-1,y-1);    DFS_K(x+1,y-1);    DFS_K(x+1,y+1);    DFS_K(x-1,y+1);}int main(){#ifdef test    freopen("sample.txt","r",stdin);#endif    int count_s,count_k,n,num=1;    while(scanf("%d",&n)!=EOF)    {        memset(a,'0',sizeof(a));        memset(flag_s,0,sizeof(flag_s));        memset(flag_k,0,sizeof(flag_k));        if(!n) break;        for(int i=1; i<=n; i++)        {            getchar();            for(int j=1; j<=n; j++)                scanf("%c",&a[i][j]);        }        count_s=count_k=0;        for(int i=1; i<=n; i++)            for(int j=1; j<=n; j++)            {                if(a[i][j]-'0'&&!flag_s[i][j]&&DFS_S(i,j))                    count_s++;                if(a[i][j]-'0'&&!flag_k[i][j]&&DFS_K(i,j))                    count_k++;            }        printf("Case %d: %d %d\n\n",num++,count_s,count_k);    }    return 0;}


原创粉丝点击