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

Uva657 - The die is cast

时间:2015-09-04 23:53:23      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:

原题链接https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=598

这题就是在一堆*里找X,相邻的X算一个,所以我们可以两次dfs搜索,dfs2搜*有多少堆,dfs2搜一堆*里面有多少个不同的X,然后在按升序把每个堆里面的不同X输出来= =

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
char ma[100][100];
int n,m;
int t;
int dis[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int num[100];
void dfs1(int x,int y)
{
    int xx,yy;
    ma[x][y]=*;
    for(int i=0;i<4;i++)
    {
        xx=x+dis[i][0];
        yy=y+dis[i][1];
        if(xx<0||xx>=n||yy<0||yy>=m||ma[xx][yy]==*)
        continue;
        if(ma[xx][yy]==X)
            dfs1(xx,yy);
    }
}
void dfs2(int x,int y)
{
    int xx,yy; 
    ma[x][y]=.;
    for(int i=0;i<4;i++)
    { 
       xx=x+dis[i][0];
       yy=y+dis[i][1];
       if(xx<0||xx>=n||yy<0||yy>=m||ma[xx][yy]==.)
        continue;
        if(ma[xx][yy]==X)
        {
        dfs1(xx,yy);
        num[t]++;
        }    
          if(ma[xx][yy]==*)
        dfs2(xx,yy);
    }
}
int main()
{
    int cnt=0;
    while(scanf("%d %d",&m,&n)!=EOF&&m&&n)
    {
        t=0;
        memset(num,0,sizeof(num));
        memset(ma,.,sizeof(ma));
        for(int i=0;i<n;i++)
         scanf("%s",ma[i]); 
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(ma[i][j]==*)
                {
                    dfs2(i,j);
                    t++;
                }
            }
        }
        sort(num,num+t);
        printf("Throw %d\n",++cnt);
        for(int i=0;i<t-1;i++)
        printf("%d ",num[i]);
        printf("%d\n",num[t-1]);
        printf("\n"); 
    }
    return 0;
}

 

Uva657 - The die is cast

标签:

原文地址:http://www.cnblogs.com/NaCl/p/4782520.html

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