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 }
  • 相关阅读:
    java数据结构-循环链表实现
    java数据结构-普通链表实现测试
    java数据结构-普通链表实现
    java数据结构-排序算法-插入算法
    java数据结构-排序算法-快排算法
    java数据结构-递归算法-简单递归算法
    python------------------异常处理
    自定义Web框架
    Django框架第一篇
    Django框架之第二篇
  • 原文地址:https://www.cnblogs.com/tsw123/p/4478010.html
Copyright © 2011-2022 走看看