poj 3020 Antenna Placement
Posted jzdwajue
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj 3020 Antenna Placement相关的知识,希望对你有一定的参考价值。
二分匹配基础,仅仅要将a。b找出来就好
对于每一个“ *”的4个方向进行查找而且记录他们间的关系;
由于我们对a->b和b->a都进行了读取。所以要除2;
#include<stdio.h> #include<string.h> char str[41][11]; bool mat[400][400],usedif[400]; int h,w,link[400],num; int dx[4]={0,0,-1,1}; int dy[4]={1,-1,0,0}; bool can(int t) { for(int i=0;i<w*h;i++) if(usedif[i]==0&&mat[t][i]==1) { usedif[i]=1; if(link[i]==-1||can(link[i])) { link[i]=t; return true; } } return false; } int MaxMatch() { int sum=0; memset(link,-1,sizeof(link)); for(int i=0;i<h*w;i++) { memset(usedif,false,sizeof(usedif)); if(can(i)) sum++; } return sum; } int main() { int T; scanf("%d",&T); while(T--) { num=0; scanf("%d%d",&h,&w); memset(mat,false,sizeof(mat)); for(int i=0;i<h;i++) scanf("%s",str[i]); for(int i=0;i<h;i++) for(int j=0;j<w;j++) if(str[i][j]==‘*‘) { num++; for(int k=0;k<4;k++) { int x,y; x=i+dx[k]; y=j+dy[k]; if(x>=0&&x<h&&y>=0&&y<w&&str[x][y]==‘*‘) mat[i*w+j][x*w+y]=true; } } printf("%d\n",num-MaxMatch()/2); } return 0; }
以上是关于poj 3020 Antenna Placement的主要内容,如果未能解决你的问题,请参考以下文章
POJ 3020 Antenna Placement 最小边覆盖
POJ 3020 Antenna Placement 最大匹配