zoukankan      html  css  js  c++  java
  • 洛谷P1506 拯救oibh总部

    深搜 灌水
    这题 我们就相当于求 路径上不经过 * 能到达边界的点有几个
    然后我就可以从边界上开始灌水,染色,遇到 * 就 return
    然后就相当于 没有被洪水填到的就是 不会到边界的节点

     1 include <cstdio>
     2 #include <cmath>
     3 #include <cstring>
     4 #include <cstdlib>
     5 #include <string>
     6 #include <algorithm>
     7 #include <iomanip>
     8 #include <iostream>
     9 using namespace std ;
    10 
    11 const int dx[5] = {0,1,0,0,-1},
    12           dy[5] = {0,0,1,-1,0} ;
    13 int n,m,ans ;
    14 char a[501][501] ;
    15 
    16 inline bool pd(int xx,int yy) 
    17 {
    18     if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&a[xx][yy]=='0') return true ;
    19     return false ; 
    20 }
    21 
    22 void dfs(int x,int y ) 
    23 {
    24     int xx,yy ;
    25     for(int i=1;i<=4;i++) 
    26     {
    27         xx = x+dx[i] ;
    28         yy = y+dy[i] ;
    29         if(pd(xx,yy)) 
    30         {
    31             a[xx][yy] = '*' ;
    32             dfs(xx,yy) ;
    33         }
    34     }
    35 }
    36 
    37 int main() 
    38 {
    39     scanf("%d%d",&n,&m) ;
    40     for(int i=1;i<=n;i++) 
    41         scanf("%s",a[ i ]+1) ;
    42     for(int i=1;i<=n;i++) 
    43     {
    44         if(a[i][1]=='0') a[i][1] = '*',dfs(i,1) ; 
    45         if(a[i][m]=='0') a[i][m] = '*',dfs(i,m) ;
    46     }
    47     for(int i=1;i<=m;i++)
    48     {
    49         if(a[1][i]=='0') a[1][i] = '*',dfs(1,i) ;
    50         if(a[n][i]=='0') a[n][i] = '*',dfs(n,i) ;
    51     }
    52     ans = 0 ;
    53     for(int i=1;i<=n;i++) 
    54         for(int j=1;j<=m;j++) if(a[i][j]=='0') ans++ ;
    55     printf("%d
    ",ans) ; 
    56     return 0 ;
    57 }
  • 相关阅读:
    路飞学城Python-Day142
    路飞学城Python-Day141
    路飞学城Python-Day140
    路飞学城Python-Day136
    路飞学城Python-Day137
    路飞学城Python-Day117
    java基础知识总结
    Maven
    MySql实现分页查询
    js中的正则表达式入门
  • 原文地址:https://www.cnblogs.com/third2333/p/6850767.html
Copyright © 2011-2022 走看看