• uva 657 The die is cast


    题意:给定一个图  分别找出每片*中 X的数量  统计并排序

    解题思路:分别标记'X' 和'*' 深搜 ,深搜‘*’和'X'在找到‘X’的时候再深搜‘X’

    解题代码:

    // File Name: uva572.c
    // Author: darkdream
    // Created Time: 2013年05月22日 星期三 19时19分08秒
    
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<time.h>
    #include<math.h>
    char str[128][128];
    int visit[128][128];
    int mivisit[120][120];
    struct node 
    {
        int i , j ;
    
    }nodes[10000],minodes[1000];
    int cmp(const void *a,const void *b)
    {
        return *(int *)a - *(int*)b;
    }
    int xadd[] = {+1,-1,0,0};
    int yadd[] = {0,0,+1,-1};
    int main(){
    
        //freopen("/home/plac/problem/input.txt","r",stdin);
        //freopen("/home/plac/problem/output.txt","w",stdout);
        int n ,m,t =  0; 
        while(scanf("%d %d",&n,&m) != EOF)
        {
            t ++;
            memset(str,0,sizeof(str));
            memset(nodes,0,sizeof(nodes));
            memset(visit,0,sizeof(visit));
            memset(mivisit,0,sizeof(mivisit));
            if(n == 0 && m == 0)
                break;
            for(int i = 1;i <= m; i ++)
            {
                scanf("%s",&str[i][1]);
            }
            int sum = 0 ;
            int k[1000];
            for(int i = 1 ; i <= m ;i ++)
            {
                for(int j = 1 ;j <= n ; j++)
                {
                    if((str[i][j] == '*' || str[i][j] == 'X' )&& visit[i][j] == 0)
                    {
                        memset(nodes,0,sizeof(nodes));
                        sum++;
                        nodes[1].i = i ; 
                        nodes[1].j = j ;
                        visit[i][j] =1 ;
                        int low  = 1, high = 1,temp =  0;;
                        while(low <= high )
                        {
                            for(int k = 0 ;k < 4 ;k ++)
                            {  
                                int tx = nodes[low].i + xadd[k];
                                int ty = nodes[low].j + yadd[k];
                                if((str[tx][ty] == '*' ||str[tx][ty] == 'X') && !visit[tx][ty] )
                                {
                                    if(str[tx][ty] == 'X' && !mivisit[tx][ty] )
                                    {
                                        temp ++;
                                        memset(minodes,0,sizeof(minodes));
                                        minodes[1].i = tx;
                                        minodes[1].j = ty;
                                        mivisit[tx][ty] = 1 ;
                                        int milow = 1, mihigh = 1; 
                                        while(milow <= mihigh )
                                        {
                                            for(int s = 0 ;s < 4 ;s ++)
                                            {  
                                                int mitx = minodes[milow].i + xadd[s];
                                                int mity = minodes[milow].j + yadd[s];
                                                if( str[mitx][mity] == 'X' && !mivisit[mitx][mity] )
                                                {
                                                    mihigh++;
                                                    mivisit[mitx][mity] = 1; 
                                                    minodes[mihigh].i = mitx;
                                                    minodes[mihigh].j = mity;
                                                }
                                            }
                                            milow++;
                                        }
    
                                    }
                                    high++;
                                    visit[tx][ty] = 1; 
                                    nodes[high].i = tx;
                                    nodes[high].j = ty;
                                }
                            }
                            low++;
                        }
                        k[sum] = temp;
                    }
                }
            }
            printf("Throw %d\n",t);
            qsort(k+1,sum,sizeof(int),cmp);
            for(int i = 1;i <= sum ;i ++)
            {
                if(i != 1)
                   printf(" ");
                printf("%d",k[i]);
            }
            printf("\n\n");
    
        }
        return 0 ;
    }
    View Code
    没有梦想,何谈远方
  • 相关阅读:
    电商总结(二)日志与监控系统的解决方案
    倾力推荐,哪一本让你想要加入书单
    电商总结(一)小型电商网站的架构
    聊一聊如何提升团队开发效率
    Nancy总结(三)Nancy资料介绍
    【推荐】2016年不得不读的九本好书
    Solr学习总结(七)Solr搜索引擎的整体架构
    再见 2015,你好 2016
    Solr学习总结(六)SolrNet的高级用法(复杂查询,分页,高亮,Facet查询)
    Solr学习总结(五)SolrNet的基本用法及CURD
  • 原文地址:https://www.cnblogs.com/zyue/p/3093636.html
Copyright © 2020-2023  润新知