zoukankan      html  css  js  c++  java
  • hdu 5093 Battle ships

    二分图匹配

      1 #include<cstdio>
      2 #include<cstring>
      3 #include<iostream>
      4 #include<cmath>
      5 #define maxn 60
      6 #define maxd  1500
      7 using namespace std;
      8 int v[maxd][maxd],vist[maxd],math[maxd];
      9 
     10 int col[maxn][maxn],row[maxn][maxn];
     11 int k1,k2,n,m;
     12 char str[maxn][maxn];
     13 void creat_row()
     14 {
     15     k1=1;
     16     for(int i=0;i<m;i++)
     17     {
     18         int flag=0;
     19         for(int j=0;j<n;j++)
     20         {
     21             if(str[i][j]=='*')
     22             {
     23                 row[i][j]=k1;
     24                 flag=1;
     25             }
     26             if(str[i][j]=='#')
     27             {
     28                k1++;
     29                flag=0;
     30             }
     31         }
     32         if(flag)
     33             k1++;
     34     }
     35 }
     36 void creat_col()
     37 {
     38      k2=1;
     39     for(int j=0;j<n;j++)
     40     {
     41         int flag=0;
     42         for(int i=0;i<m;i++)
     43         {
     44             if(str[i][j]=='*')
     45             {
     46                 col[i][j]=k2;
     47                 flag=1;
     48             }
     49             if(str[i][j]=='#')
     50             {
     51                k2++;
     52                flag=0;
     53             }
     54         }
     55         if(flag)
     56             k2++;
     57     }
     58 }
     59 int dfs(int x)
     60 {
     61     for(int i=1;i<k2;i++)
     62     {
     63         if(!vist[i]&&v[x][i])
     64         {
     65             vist[i]=1;
     66             if(math[i]==-1||dfs(math[i]))
     67             {
     68                 math[i]=x;
     69                 return true;
     70             }
     71 
     72         }
     73     }
     74     return false;
     75 }
     76 void KM()
     77 {
     78     int ans=0;
     79     for(int i=1;i<k1;i++)
     80     {
     81         memset(vist,0,sizeof(vist));
     82         if(dfs(i)) ans++;
     83     }
     84     printf("%d
    ",ans);
     85 }
     86 int main()
     87 {
     88     int t;
     89     scanf("%d",&t);
     90     while(t--)
     91     {
     92         scanf("%d %d",&m,&n);
     93         for(int i=0; i<m; i++)
     94             scanf("%s",&str[i]);
     95         creat_row();
     96         creat_col();
     97         //printf("%d %d==
    ",k1,k2);
     98         memset(v,0,sizeof(v));
     99         memset(math,-1,sizeof(math));
    100         for(int i=0; i<m; i++)
    101         {
    102             for(int j=0; j<n; j++)
    103             {
    104                 if(str[i][j]=='*')
    105                     v[row[i][j]][col[i][j]]=1;
    106             }
    107 
    108         }
    109         KM();
    110     }
    111     return 0;
    112 }
  • 相关阅读:
    MySQL练习题
    MySql基础操作
    解决使用IDEA启动Tomcat成功但localhost:8080无法访问的问题
    1417. 重新格式化字符串--来源:力扣(LeetCode)
    字符消除
    Comsol中Absolute Pressure的解释
    气体流量与质量流率换算
    FileZilla MLSD错误:连接超时、读取目录列表失败
    Avalon总线的地址对齐与NIOS编程
    同步复位和异步复位--好文章就是要记录下来
  • 原文地址:https://www.cnblogs.com/tsw123/p/4478010.html
Copyright © 2011-2022 走看看