zoukankan      html  css  js  c++  java
  • 计蒜客:踏青(DFS)

    解题思路:

    dfs深度优先搜索,用map存储地图,vis记录是否遍历,主函数里for循环寻找没有来到过的草丛,遇到了就res++且dfs此点

    此题里的dfs实质是将一块草丛扩充成为一片草地,即遇到一块草地,就dfs寻找和其连续的草地后将此块vis设为1,即连成一片草地

    循环到这快地时因为vis==1所以就会跳过不再判断

     1 #include <iostream>
     2 using namespace std;
     3 int vis[105][105];
     4 char map[105][105];
     5 int n,m;
     6 int ax[10]={1,0,-1,0};
     7 int ay[10]={0,1,0,-1};
     8 void dfs(int x,int y){
     9     if(x==n||y==m)//到边界,回溯
    10         return;
    11     vis[x][y]=1;//vis置1
    12     for(int i=0;i<4;i++){
    13         int tx=x+ax[i];
    14         int ty=y+ay[i];
    15         if(map[tx][ty]=='#'&&vis[tx][ty]==0){//通过上下左右找到了与之连续的草地
    16             dfs(tx,ty);//递归继续搜索
    17         }
    18     }
    19 }
    20 int main(){
    21     int res=0;
    22     cin>>n>>m;
    23     for(int i=0;i<n;i++){
    24         for(int j=0;j<m;j++){
    25             cin>>map[i][j];//输入地图
    26         }
    27     }
    28     for(int i=0;i<n;i++){
    29         for(int j=0;j<m;j++){
    30             if(map[i][j]=='#'&&vis[i][j]==0){//寻找地图里的草地
    31                 res++;//找到即结果加1
    32                 dfs(i,j);//寻找连续草地
    33             }
    34         }
    35     }
    36     cout<<res<<endl;//输出结果
    37     return 0;
    38 }
  • 相关阅读:
    JS创建类和对象(好多方法哟!)
    BMI身体质量指数计算公式
    点击button显示文字
    xml中设置button的背景颜色
    Android layout的属性介绍
    eclipse中自动补齐代码设置
    android开发中常用的快捷键
    eclipse修改Android工程图标显示
    Android运行报错
    读《人月神话》有感
  • 原文地址:https://www.cnblogs.com/nilbook/p/13442169.html
Copyright © 2011-2022 走看看