zoukankan      html  css  js  c++  java
  • 两次DFS,POJ(1481)

    题目链接:http://poj.org/problem?id=1481

     两次DFS,这里的思路是,没找到*,就说明,有一个骰子,因此,每搜索到一个*,深搜4个方向,并且变为'.',要是搜到'X',就是骰子的点数++,而且将他的四周的'X'变为'.'

    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<cstdio>
    #include<cmath>
    #include<string>
    
    using namespace std;
    
    char a[50+5][50+5];
    int count;
    
    int i_cmp(void const *x,void const *y)
    {
        return *(int*)x-*(int*)y;
    }
    
    void DFS_X(int x,int y)
    {
        if(a[x][y]!='X')
            return ;
        else
            a[x][y]='.';
        DFS_X(x-1,y);    ///题目要求只需要考虑上下左右四个方向即可,而不是八个方向
        DFS_X(x,y-1);
        DFS_X(x,y+1);
        DFS_X(x+1,y);
    }
    
    void DFS(int x,int y)
    {
        if(a[x][y]=='.')
            return ;
        if(a[x][y]=='X')
        {
            DFS_X(x,y);
            count++;
        }
        a[x][y]='.';
        DFS(x-1,y);
        DFS(x,y-1);
        DFS(x,y+1);
        DFS(x+1,y);
    }
    
    int main()
    {
        int w,h,num=1,ct,dote[100];
        while(scanf("%d%d",&w,&h)!=EOF)
        {
            if(w==0&&h==0) break;
            memset(a,'.',sizeof(a));
            for(int i=1; i<=h; i++)
            {
                getchar();
                for(int j=1; j<=w; j++)
                    scanf("%c",&a[i][j]);
            }
            ct=0;
            for(int i=1; i<=h; i++)
                for(int j=1; j<=w; j++)
                    if(a[i][j]=='*')
                    {
                        count=0;
                        DFS(i,j);
                        dote[ct++]=count;
                    }
            printf("Throw %d
    ",num++);
            qsort(dote,ct,sizeof(dote[0]),i_cmp);
            for(int i=0; i<ct; i++)
            {
                if(i)
                    printf(" ");
                printf("%d",dote[i]);
            }
            printf("
    
    ");
        }
        return 0;
    }
  • 相关阅读:
    hdu 1260 Tickets
    hdu 4738 Caocao's Bridges(桥的最小权值+去重)
    找规律
    C语言快速排序
    数组的初始化方法
    C语言选择排序
    副本机制
    安装完Kali的后续操作
    Bool盲注
    Python中的列表
  • 原文地址:https://www.cnblogs.com/TreeDream/p/5513344.html
Copyright © 2011-2022 走看看