POJ 3020 Antenna Placement
2016-08-09 15:32
232 查看
Source Code
#include <iostream> #include <cstring> using namespace std; int map[40+5][10+5], next[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; int a[400+5][400+5], match[400+5]; bool vis[400+5]; int k; bool fin(int x) { for(int i=1;i<=k;i++) { if(a[x][i]&&!vis[i]) { vis[i]=1; if(!match[i]||fin(match[i])) { match[i]=x; return 1; } } } return 0; } int main() { int n, m, t; cin>>t; while(t--) { cin>>n>>m; k=0; memset(map,0,sizeof(map)); memset(a,0,sizeof(a)); memset(match,0,sizeof(match)); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { char temp; cin>>temp; if(temp=='*') map[i][j]=++k; } // for(int i=1;i<=n;i++) { // for(int j=1;j<=m;j++) // cout<<map[i][j]<<' '; // cout<<endl; // } for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) for(int l=0;l<4;l++){ int tx=i+next[l][0], ty=j+next[l][1]; if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&map[i][j]&&map[tx][ty]) a[map[i][j]][map[tx][ty]]=1; } int ans=0; for(int i=1;i<=k;i++){ memset(vis,0,sizeof(vis)); if(fin(i)) ans++; } cout<<k-ans/2<<endl; } return 0; }
相关文章推荐
- 匈牙利入门--poj 3020最小路径
- Poj 3020 Antenna Placement【最小边覆盖 匈牙利算法】
- POJ 3020 Antenna Placement 匈牙利算法
- poj-3020 Antenna Placement
- poj 3020 二分图最小路径覆盖
- POJ3020【二分匹配】
- poj 3020 Antenna Placement 二分图匹配
- poj 3020 Antenna Placement(二分无向图 匈牙利)
- POJ 3020 Antenna Placement
- poj 3020 二分图 最大匹配(最小边覆盖问题)
- POJ 3020 Antenna Placement 二分匹配
- poj 3020 Antenna Placement
- poj3020-Antenna Placement(最小路径覆盖问题,最大匹配)
- poj 3020--Antenna Placement
- poj 3020 Antenna Placement
- POJ:3020-Antenna Placement(二分图的最小路径覆盖)
- poj-3020
- POJ 3020 Antenna Placement
- POJ 3020 Antenna Placement【二分匹配——最小路径覆盖】
- poj_3020