• POJ 1111 DFS


    DFS 水题

    求周长:若当前状态旁边有k个x,则总周长加4-x

     1 #include <iostream>
    2 #include <stdio.h>
    3 #include <string.h>
    4 using namespace std;
    5
    6 const int maxx=20;
    7 int dir[8][2]={{0,-1},{1,0},{0,1},{-1,0},{1,-1},{1,1},{-1,1},{-1,-1}};
    8 int cnt,n,m;
    9 char c[maxx+2][maxx+2];
    10 bool visit[maxx+2][maxx+2];
    11 bool judge(int a,int b)
    12 {
    13 if(c[a][b]=='X' && a>=1 && a<=n && b>=1 && b<=m) return 1;
    14 return 0;
    15 }
    16
    17 void dfs(int x,int y)
    18 {
    19 int i,j,tmp,a,b;
    20 for(i=0;i<=7;i++)
    21 {
    22 a=x+dir[i][0];
    23 b=y+dir[i][1];
    24 if(judge(a,b) && !visit[a][b])
    25 {
    26 visit[a][b]=1;
    27 tmp=0;
    28 for(j=0;j<=3;j++)
    29 if(judge(a+dir[j][0],b+dir[j][1]))
    30 tmp++;
    31 cnt=cnt+4-tmp;
    32 dfs(a,b);
    33 }
    34 }
    35 }
    36
    37 int main()
    38 {
    39 int x,y,i,j;
    40 //freopen("in.txt","r",stdin);
    41 while(scanf("%d%d%d%d",&n,&m,&x,&y)!=EOF)
    42 {
    43 if(n==0 && m==0 && x==0 && y==0)
    44 break;
    45 memset(visit,0,sizeof(visit));
    46 for(i=1;i<=n;i++)
    47 for(j=1;j<=m;j++)
    48 cin>>c[i][j];
    49 cnt=0;
    50 visit[x][y]=1;
    51 for(j=0;j<=3;j++)
    52 if(judge(x+dir[j][0],y+dir[j][1]))
    53 cnt++;
    54 cnt=4-cnt;
    55 dfs(x,y);
    56 printf("%d\n",cnt);
    57 }
    58 return 0;
    59 }



  • 相关阅读:
    世界排名第二的web前端框架bulma与Bootstrap框架的选择
    Bootstrap5中文手册翻译完毕
    RabbitMQ 学习一 了解+点对点模式
    仿京东搜索
    ES集成SpringBoot
    ElasticSearch
    权限管理整合springsecurity代码执行过程
    权限管理
    Gateway网关
    canal数据同步 客户端代码实现
  • 原文地址:https://www.cnblogs.com/inpeace7/p/2422942.html
Copyright © 2020-2023  润新知