657 - The die is cast

#include<bits/stdc++.h>
using namespace std;

int counter,w,h;
char str[53][53];

void dfs1(int i,int j)
{
    if(i<0||j<0||i>=h||j>=w)
    {
        return;
    }
    if(str[i][j]!='X')
    {
        return;
    }
    str[i][j]='.';
    dfs1(i,j+1);
    dfs1(i,j-1);
    dfs1(i+1,j);
    dfs1(i-1,j);
    return;
}

void dfs(int i,int j)
{
    if(i<0||j<0||i>=h||j>=w)
    {
        return;
    }

    if(str[i][j]=='.')
    {
        return;
    }

    if(str[i][j]=='X')
    {
        counter++;
        dfs1(i,j);
    }
    str[i][j]='.';
    dfs(i,j+1);
    dfs(i,j-1);
    dfs(i+1,j);
    dfs(i-1,j);

    return;
}

int main()
{
    int i,j,k,test=0,arr[53];
    while(scanf("%d%d",&w,&h)==2)
    {
        if(w==0 && h==0)
        {
            break;
        }
        getchar();
        for(i=0; i<h; i++)
        {
            for(j=0; j<w; j++)
            {
                scanf("%c",&str[i][j]);
            }
            getchar();
        }

        k=0;

        for(i=0; i<h; i++)
        {
            for(j=0; j<w; j++)
            {
                if(str[i][j]!='.')
                {
                    counter=0;
                    dfs(i,j);
                    if(counter>0)
                    {
                        arr[k]=counter;
                        k++;
                    }
                    counter=0;
                }
            }
        }
        sort(arr,arr+k);
        printf("Throw %d\n",++test);
        if(arr[0]>0)
        {
            printf("%d",arr[0]);
        }
        for(i=1; i<k; i++)
        {
            printf(" %d",arr[i]);
        }
        printf("\n\n");
        memset(arr,0,sizeof(arr));
    }
    return 0;
}

0 comments: (+add yours?)