zoukankan      html  css  js  c++  java
  • 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 }



  • 相关阅读:
    Java String 乱码
    HBase非原理性浅析
    git cherry-pick
    数据结构之队列
    数据结构之栈
    算法之简单排序
    数据结构之数组
    数据结构简介
    Java类型信息
    基数排序
  • 原文地址:https://www.cnblogs.com/inpeace7/p/2422942.html
Copyright © 2011-2022 走看看