zoukankan      html  css  js  c++  java
  • hdu 2952 Counting Sheep 解题报告

    其实和1241是一个题 就是 把上下左右的四个方向连在一起的#是为片# 问图中有几篇#

    ps:打得时候搜索方向的向量的坐标打错了 找了半天 哎 注意一下吧

    方法和1421一样 并且方向少了 变为4个 (1241的方向是直接粘贴的 看来有的东西只是看懂看不行 一定要亲自打一下 实践一下才行)

    在图中找到一个#使用一次dfs标记所有相连的# 总数+1;(见1241)

     1 #include<iostream>
    2 #include<cstdio>
    3 #include<string>
    4 #include<queue>
    5 using namespace std;
    6 int f[4][2]={0,1,1,0,0,-1,-1,0};
    7 bool visit[100][100]={0};
    8 char map[100][100];
    9 int n,m;
    10 void dfs(int x,int y)
    11 {
    12 int i,j,k,dx,dy;
    13 visit[x][y]==1;
    14 for(i=0;i<4;i++)
    15 {
    16 dx=x+f[i][0];
    17 dy=y+f[i][1];
    18 if(dx>=0 && dx<n && dy>=0 && dy<m && map[dx][dy]=='#' && visit[dx][dy]==0)
    19 {
    20 visit[dx][dy]=1;
    21 dfs(dx,dy);
    22 }
    23
    24 }
    25 return;
    26 }
    27 int main()
    28 {
    29
    30 int ncase,i,j,k,ans;
    31 scanf("%d",&ncase);
    32 for(i=0;i<ncase;i++)
    33 {
    34
    35 memset(map,0,sizeof(map));
    36 memset(visit,0,sizeof(visit));
    37
    38 scanf("%d %d",&n,&m);
    39 getchar();
    40 ans=0;
    41 for(j=0;j<n;j++)
    42 {
    43 for(k=0;k<m;k++)
    44 scanf("%c",&map[j][k]);
    45 getchar();
    46 }
    47 for(j=0;j<n;j++)
    48 {
    49 for(k=0;k<m;k++)
    50 {
    51 if(map[j][k]=='#'&& visit[j][k]==0)
    52 {
    53
    54 dfs(j,k);
    55 visit[j][k]=1;
    56 ans++;
    57 }
    58
    59 }
    60 }
    61 printf("%d\n",ans);
    62 }
    63 //system("pause");
    64 return 0;
    65 }
  • 相关阅读:
    500 多个 Linux 命令文档搜索
    C++ 字符串基本操作
    串的模式匹配算法
    查看、启动、关闭防火墙
    天润融通面试
    LeetCode 169. 求众数
    【面试题】人人车一次面试总结
    一个完整的 JS 身份证校验代码
    oracle多表查询
    百度地图的Icon
  • 原文地址:https://www.cnblogs.com/yujiaao/p/2151736.html
Copyright © 2011-2022 走看看