zoukankan      html  css  js  c++  java
  • poj 3020Antenna Placement

    http://poj.org/problem?id=3020

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #define maxn 1000
     5 using namespace std;
     6 int t,n,m;
     7 char g[maxn][maxn];
     8 int map1[maxn][maxn];
     9 int gg[maxn][maxn];
    10 bool vis[maxn];
    11 int match[maxn];
    12 int dir[4][2]={{0,-1},{0,1},{1,0},{-1,0}};
    13 int res,num;
    14 int dfs(int p)
    15 {
    16     int i,t;
    17     for(i=1; i<=num; i++)
    18     {
    19         if(gg[i][p]&&!vis[i])
    20         {
    21             vis[i]=true;
    22             t=match[i];
    23             match[i]=p;
    24             if(t==-1||dfs(t))
    25                 return 1;
    26             match[i]=t;
    27         }
    28     }
    29     return 0;
    30 }
    31 void pro()
    32 {
    33     int i;res=0;
    34     for(i=1; i<=num; i++)
    35     {
    36         memset(vis,false,sizeof(vis));
    37         res+=dfs(i);
    38     }
    39 }
    40 int main()
    41 {
    42     scanf("%d",&t);
    43     while(t--)
    44     {
    45         memset(match,-1,sizeof(match));
    46         memset(gg,0,sizeof(gg));
    47         memset(map1,0,sizeof(map1));
    48         num=0;
    49         scanf("%d%d",&n,&m);
    50         for(int i=0; i<n; i++)
    51         {
    52             scanf("%s",g[i]);
    53             for(int j=0; j<m; j++)
    54             {
    55                 if(g[i][j]=='*')
    56                 {
    57                    map1[i][j]=++num;
    58                 }
    59             }
    60         }
    61         for(int i=0; i<n; i++)
    62         {
    63             for(int j=0; j<m; j++)
    64             {
    65                 if(map1[i][j])
    66                 {
    67                     for(int k=0; k<4; k++)
    68                     {
    69                         int x=i+dir[k][0];
    70                         int y=j+dir[k][1];
    71                         if(map1[x][y])
    72                         {
    73                             gg[map1[i][j]][map1[x][y]]=1;
    74                         }
    75                     }
    76                 }
    77             }
    78         }
    79         pro();
    80         printf("%d
    ",num-res/2);
    81     }
    82     return 0;
    83 }
    View Code
  • 相关阅读:
    C语言I博客作业06
    C语言I博客作业07
    C语言I博客作业03
    oracle 创建用户并指定表空间
    Oracle 给用户赋予dblink权限,创建dblink
    IDEA 2020.2 破解、激活
    nginx 里的常用变量
    nginx 跨域问题解决
    elasticsearch (一)
    kubenetes 安装部署
  • 原文地址:https://www.cnblogs.com/fanminghui/p/3525016.html
Copyright © 2011-2022 走看看