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 }
  • 相关阅读:
    tensorflow之tf.squeeze()
    tf.slice()
    tensorflow之tf.meshgrid()
    tensorflow: arg_scope()
    tf.ConfigProto()
    os.path.join()
    argparse.ArgumentParser()用法解析
    Flutter学习之ListView(1)
    Flutter学习之image
    Flutter学习之image
  • 原文地址:https://www.cnblogs.com/nilbook/p/13442169.html
Copyright © 2011-2022 走看看