• UVA657 The die is cast(DFS、BFS)


    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=598

    这题题意看了老半天 让求图形中的X的区域块数 每个区域有多少个X是不相连的 DFS搜有多少个区域 BFS标记 有每个区域里多少X区域块

    注意两点吧 WA了5次 第一个可能为X 就直接BFS 再DFS

    第二 BFS中遇到的*要保留起来 把相连的X标记完之后 继续搜 不然区域块数会被分开

    View Code
      1 #include <iostream>
      2 #include<cstdio>
      3 #include<string.h>
      4 #include<algorithm>
      5 void dfs(int x,int y);
      6 char c[51][51];
      7 int f[51][51],a[4][2] = {{1,0},{0,1},{-1,0},{0,-1}},num,n,m,tx,ty;
      8 using namespace std;
      9 int judge(int x,int y)
     10 {
     11     if(x<1||y<1||x>n||y>m)
     12     return 0;
     13     if(c[x][y]=='.')
     14     return 0;
     15     return 1;
     16 }
     17 
     18 void bfs(int x,int y)
     19 {
     20     int d = 1,p = 0,q[3000][2],i,flag = 0,aa[1000][2],g = 1;
     21     q[1][0] = x;
     22     q[1][1] = y;
     23     f[x][y] = 1;
     24     while(p!=d)
     25     {
     26         p++;
     27         for(i = 0 ; i < 4 ; i++)
     28         {
     29             int px = q[p][0]+a[i][0];
     30             int py = q[p][1]+a[i][1];
     31             if(judge(px,py)&&!f[px][py])
     32             {
     33                 if(c[px][py]=='X')
     34                 {
     35                     f[px][py] = 1;
     36                     q[++d][0] = px;
     37                     q[d][1] = py;
     38                 }
     39                 else
     40                 {
     41                     g++;
     42                     aa[g][0] = px;
     43                     aa[g][1] = py;
     44                 }
     45             }
     46         }
     47     }
     48     for(i = 1; i <= g; i++)
     49     dfs(aa[i][0],aa[i][1]);
     50 }
     51 void dfs(int x,int y)
     52 {
     53     int i,j,k;
     54     for(i = 0 ; i < 4 ; i++)
     55     {
     56         int px = x+a[i][0];
     57         int py = y+a[i][1];
     58         if(judge(px,py))
     59         {
     60             if(!f[px][py])
     61             {
     62                 if(c[px][py]=='*')
     63                 {
     64                     f[px][py] = 1;
     65                     dfs(px,py);
     66                 }
     67                 else
     68                 {
     69                     num++;
     70                     bfs(px,py);
     71                 }
     72             }
     73         }
     74     }
     75 
     76 }
     77 int main()
     78 {
     79     int i,j,k = 0,t,to[3000];
     80     while(scanf("%d %d",&m,&n)!=EOF)
     81     {
     82         if(n==0&&m==0)
     83         break;
     84         k++;
     85         memset(f,0,sizeof(f));
     86         for(i = 1; i <= n; i++)
     87         {
     88             getchar();
     89             for(j = 1; j <= m ; j++)
     90             {
     91                 c[i][j] = getchar();
     92             }
     93         }
     94         int g = 0;
     95         for(i = 1; i <= n ; i++)
     96         for(j = 1; j <= m ; j++)
     97         if(!f[i][j]&&(c[i][j] == '*'||c[i][j]=='X'))
     98         {
     99             f[i][j] = 1;
    100             num = 0;
    101             if(c[i][j] == 'X')
    102             {
    103                 num = 1;
    104                 bfs(i,j);
    105             }
    106             dfs(i,j);
    107             if(num>0&&num<7)
    108             to[g++] = num;
    109         }
    110         sort(to,to+g);
    111         printf("Throw %d\n",k);
    112         for(i = 0 ; i < g ; i++)
    113         {
    114             if(i!=0)
    115             printf(" ");
    116             printf("%d",to[i]);
    117         }
    118         puts("");
    119         puts("");
    120     }
    121     return 0;
    122 }

    附组数据

    6 6

    ...XX*

    .....X

    ...XX.

    .....X

    ..XX..

    ....*X

    Throw 1

    1 1 1 1 2

    6 6

    ...XX*

    .....X

    ...XX*

    .....X

    ...X**

    .....X

    Throw 2

    6

  • 相关阅读:
    Head First设计模式读书笔记
    通过FileReference打开本地图片崩溃的解决方法
    Asea——轻量级的AS3模块配置与加载管理库
    AGAL反编译器
    [Stage3D]硬件加速的径向模糊
    C#的timer类问题~!
    c语言中的大数运算模块
    TRACERT命令及用法
    Linux用户和用户组的管理概述
    linux下挂载windows的共享文件目录ftp文件夹到/root/wind目录
  • 原文地址:https://www.cnblogs.com/shangyu/p/2633042.html
Copyright © 2020-2023  润新知