二分图匹配 匈牙利算法 hdu 4185
来源:互联网 发布:渐变颜色搭配的数据 编辑:程序博客网 时间:2024/06/08 15:24
#include<stdio.h> #include<string.h> #include<iostream>#define ll long long#define N 300010using namespace std;int e[1000][1000];int map2[1000][1000];char map1[1000][1000];int book[1000];int f[1000];int cont;int dfs(int x){ for(int i=0;i<cont;i++) { if(e[x][i]&&!book[i]) { book[i]=1; if(f[i]==-1||dfs(f[i])) { f[i]=x; return 1; } } } return 0;}int main(){ int t,tt=0; scanf("%d",&t); while(t--) {tt++; memset(e,0,sizeof(e)); int n; scanf("%d",&n); cont=0; //getchar(); for(int i=0;i<n;i++) { scanf("%s",map1[i]); for(int j=0;j<n;j++) { //scanf(" %c",&map1[i][j]); if(map1[i][j]=='#') { map2[i][j]=cont++; } } } for(int i=0;i<n;i++) for(int j=0;j<n;j++) { if(map1[i][j]!='#') continue; if(j-1>=0&&map1[i][j-1]=='#') e[map2[i][j]][map2[i][j-1]]=1; if(j+1<n&&map1[i][j+1]=='#') e[map2[i][j]][map2[i][j+1]]=1; if(i+1<n&&map1[i+1][j]=='#') e[map2[i][j]][map2[i+1][j]]=1; if(i-1>=0&&map1[i-1][j]=='#') e[map2[i][j]][map2[i-1][j]]=1; } memset(f,-1,sizeof(f)); int ans=0; for(int i=0;i<cont;i++) { memset(book,0,sizeof(book)); if(dfs(i))ans++; } printf("Case %d: ",tt); printf("%d\n",ans/2); }}
阅读全文
0 0
- 二分图匹配 匈牙利算法 hdu 4185
- HDU 2063 二分图匹配 匈牙利算法
- hdu-3729 二分图匹配匈牙利算法
- 【二分图匹配-匈牙利算法】Courses HDU
- 二分图匹配:匈牙利算法
- 二分图匹配匈牙利算法
- 二分图匹配-匈牙利算法
- 匈牙利算法(二分图匹配)
- 二分图匹配 匈牙利算法
- 二分图匹配(匈牙利算法)
- 二分图匹配 匈牙利算法
- 二分图匹配-匈牙利算法
- 二分图匹配 匈牙利算法
- 二分图匹配匈牙利算法
- 二分图匹配-匈牙利算法
- 二分图匹配--匈牙利算法
- HDU 2063过山车 二分图最大匹配 匈牙利算法
- hdu 1082 Courses 二分图最大匹配(匈牙利算法)
- 【每日一题】查找一个字符串中第一个只出现两次的字符
- 初学四旋翼之遥控
- C# 反射 通过类名创建类实例
- 基于SSM整合的分页
- springMVC和mybatis整合
- 二分图匹配 匈牙利算法 hdu 4185
- Salesforce 分页
- c++类型转换
- LA 4726 斜率DP
- android studio 使用git
- C# 反射机制
- 小希的迷宫
- no valid rapl domans found in package
- linux块设备驱动(一)——块设备概念介绍