二分图匹配 匈牙利算法 hdu 4185
2017-07-20 12:59
288 查看
#include<stdio.h> #include<string.h> #include<iostream> #define ll long long #define N 300010 using 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); } }
相关文章推荐
- HDU 2063 (二分图匹配问题 匈牙利算法 13.11.05)
- HDU 5093 Battle ships [二分图匹配] [匈牙利算法]
- hdu-1045-Fire Net-二分图匹配-匈牙利算法-java
- HDU 1068 Girls and Boys(二分图匹配+最大独立集+匈牙利算法)
- HDU 1281 棋盘游戏(二分图匹配+匈牙利算法+模拟)
- hdu 2063 过山车(基础二分图匹配匈牙利算法)
- hdu 题目2063 过山车(二分图匹配,匈牙利算法)
- (匈牙利算法) hdu 4185
- HDU-1281 棋盘游戏 二分图匹配匈牙利算法
- HDU 2063 过山车 (二分图匹配之匈牙利算法)
- HDU 2063 最大二分图匹配 匈牙利算法
- hdu-3729 二分图匹配匈牙利算法
- hdu 2063 过山车(基础二分图匹配匈牙利算法)
- HDU 3729 I'm Telling the Truth(二分图匹配+匈牙利算法+变形)
- HDU 1151 Air Raid 最小路径覆盖,二分图匹配匈牙利算法(邻接表存关系)处理有向图
- hdu 2819 Swap 二分图匹配 匈牙利算法 解题报告
- HDU - 1150 Machine Schedule 最小点覆盖(最大二分图匹配-匈牙利算法)邻接表写法
- HDU 1179 Ollivanders: Makers of Fine Wands since 382 BC.(二分图匹配+匈牙利算法)
- HDU 4160 Dolls(二分图匹配+匈牙利算法+最小路径覆盖)
- hdu 1068 zoj 1137 poj 1466 Girls and Boys(二分图匹配 匈牙利算法 最大独立集)