[面试备] 暴搜 or 二分图的经典升级 : hdu 1045 Fire Net 示例 [ 二分图 ]
2013-01-19 22:59
393 查看
二分图匹配 建图的经典之作
#include <iostream> #include <string> #include <cstring> #include <cstdlib> #include <cstdio> #include <cmath> #include <vector> #include <stack> #include <deque> #include <queue> #include <bitset> #include <list> #include <map> #include <set> #include <iterator> #include <algorithm> #include <functional> #include <utility> #include <sstream> #include <climits> #include <cassert> #define BUG puts("here!!!"); using namespace std; const int N = 5; const int M = 30; char str ; int p ; int rp ; int mmap[M][M]; int pre[M]; bool vis[M]; int n; int x_id, y_id; bool dfs(int u) { for(int i = 1; i <= y_id; i++) { if(mmap[u][i] && !vis[i]) { vis[i] = true; if(pre[i] == 0 || dfs(pre[i])) { pre[i] = u; return true; } } } return false; } int maxMatch() { memset(pre, 0, sizeof(pre)); int num = 0; for(int i = 1; i <= x_id; i++) { memset(vis, 0, sizeof(vis)); if(dfs(i)) num++; } return num; } int main() { while(cin >> n, n) { for(int i = 0; i < n; i++) { scanf("%s", str[i]); } memset(p, 0, sizeof(p)); memset(rp, 0, sizeof(rp)); x_id = 0, y_id = 0; for(int i = 0; i < n; i++) { int k = 0; while(k < n) { if(str[i][k] == '.') { ++x_id; while(k < n && str[i][k] != 'X') { p[i][k] = x_id; k++; } } else k++; } } for(int i = 0; i < n; i++) { int k = 0; while(k < n) { if(str[k][i] == '.') { ++y_id; while(k < n && str[k][i] != 'X') { rp[k][i] = y_id; k++; } } else k++; } } memset(mmap, 0, sizeof(mmap)); for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { if(str[i][j] == '.') { mmap[p[i][j]][rp[i][j]] = 1; } } } printf("%d\n", maxMatch()); } return 0; }
相关文章推荐
- [面试备] 暴搜 or 二分图的经典升级 : hdu 1045 Fire Net 示例 [ 二分图 ]
- [面试备] 暴搜 or 二分图的经典升级 : hdu 1045 Fire Net 示例 [ 讲解之用 ]
- [面试备] 暴搜 or 二分图的经典升级 : hdu 1045 Fire Net 示例 [ 讲解之用 ]
- HDU 1045 Fire Net 详细题解(二分图经典模型)
- HDU 1045--Fire Net【DFS 经典】
- HDU 1045 Fire Net 二分图
- hdu 1045:Fire Net(DFS经典题)
- HDU 1045 Fire Net 二分图Bipartite题解
- hdu 1045 Fire Net
- HDU 1045 Fire Net
- hdu 1045 Fire Net-dfs
- hdu 1045 Fire Net
- HDU 1045 Fire Net
- 【HDOJ 1045】Fire Net--二分图
- hdu1045 Fire Net
- HDU 1045 Fire Net 状压暴力
- HDU-1045-Fire Net
- HDU--1045--Fire Net--DFS
- HDU 1045 Fire Net
- hdu--1045--Fire Net,NYOJ--587--dfs--blockhouses