zoukankan      html  css  js  c++  java
  • 【HDOJ】1045 Fire Net

    经典深搜。注意满足条件。

     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 #define MAXNUM 5
     5 
     6 char map[MAXNUM][MAXNUM];
     7 int visit[MAXNUM][MAXNUM];
     8 
     9 int chk(int row, int col, int n) {
    10     int i, k;
    11 
    12     if (row<0 || row>=n || col<0 || col>=n )
    13         return 0;
    14     if (visit[row][col] || map[row][col]!='.')
    15         return 0;
    16 
    17     // if this position is valid or not
    18     k = 0;
    19     for (i=col-1; i>=0; --i) {
    20         if (map[row][i] == 'X')
    21             break;
    22         if (map[row][i] == '.' && visit[row][i]) {
    23             k = 1;
    24             break;
    25         }
    26     }
    27     if (k) return 0;
    28 
    29     for (i=col+1; i<n; ++i) {
    30         if (map[row][i] == 'X')
    31             break;
    32         if (map[row][i] == '.' && visit[row][i]) {
    33             k = 1;
    34             break;
    35         }
    36     }
    37     if (k) return 0;
    38 
    39     for (i=row-1; i>=0; --i) {
    40         if (map[i][col] == 'X')
    41             break;
    42         if (map[i][col] == '.' && visit[i][col]) {
    43             k = 1;
    44             break;
    45         }
    46     }
    47     if (k) return 0;
    48 
    49     for (i=row+1; i<n; ++i) {
    50         if (map[i][col] == 'X')
    51             break;
    52         if (map[i][col] == '.' && visit[i][col]) {
    53             k = 1;
    54             break;
    55         }
    56     }
    57 
    58     if (k)
    59         return 0;
    60     else
    61         return 1;
    62 }
    63 
    64 int dfs(int n) {
    65     int i, j, tmp, max = 0;
    66 
    67     for (i=0; i<n; ++i) {
    68         for (j=0; j<n; ++j) {
    69             if ( chk(i, j, n) ) {
    70                 visit[i][j] = 1;
    71                 tmp = dfs(n) + 1;
    72                 if (tmp > max)
    73                     max = tmp;
    74                 visit[i][j] = 0;
    75             }
    76         }
    77     }
    78 
    79     return max;
    80 }
    81 
    82 int main() {
    83     int n, amount;
    84     int i;
    85 
    86     while (scanf("%d", &n)!=EOF && n) {
    87         getchar();
    88         for (i=0; i<n; ++i)
    89             gets(map[i]);
    90 
    91         memset(visit, 0, sizeof(visit));
    92         amount = dfs(n);
    93         printf("%d
    ", amount);
    94     }
    95 
    96     return 0;
    97 }
  • 相关阅读:
    数论笔记
    微积分笔记
    洛谷P3835 【模板】可持久化平衡树
    洛谷P3385 【模板】负环
    洛谷 P3379 【模板】最近公共祖先(LCA)
    洛谷P3386 【模板】二分图匹配
    洛谷P3388 【模板】割点(割顶)
    洛谷P3373 【模板】线段树 2
    洛谷P3372 【模板】线段树 1
    Linux(CentOS 6.5) 下安装MySql 5.7.18 二进制版本粗浅攻略
  • 原文地址:https://www.cnblogs.com/bombe1013/p/3612160.html
Copyright © 2011-2022 走看看