poj1486 (二分图匹配)

来源:互联网 发布:淘宝客服管理方案 编辑:程序博客网 时间:2024/05/25 18:11
#include<stdio.h>#define N 200int x1[N],x2[N],y1[N],y2[N];int map[N][N];int match[N];int vis[N];int n,con[N];int dfs(int x){int i;for(i=1;i<=n;i++){if(map[x][i]&&!vis[i]){vis[i]=1;if(match[i]==-1||dfs(match[i])){match[i]=x;return 1;}}}return 0;}int solve(){int ans=0,i;memset(match,-1,sizeof(match));for(i=1;i<=n;i++){memset(vis,0,sizeof(vis));if(dfs(i))ans++;}return ans;}int main(void){int i,j,a,b,sym=1,flag;while(~scanf("%d",&n)&&n){   memset(map,0,sizeof(map));flag=0;       for(i=1;i<=n;i++)   scanf("%d%d%d%d",&x1[i],&x2[i],&y1[i],&y2[i]);   for(i=1;i<=n;i++)   {   scanf("%d%d",&a,&b);   for(j=1;j<=n;j++)   {       if(a>=x1[j]&&a<=x2[j]&&b>=y1[j]&&b<=y2[j])   map[i][j]=1;   }   }   solve();   for(i=1;i<=n;i++)   con[i]=match[i];   printf("Heap %d\n",sym);   sym++;   for(i=1;i<=n;i++)   {   map[con[i]][i]=0;           if(solve()==n)   continue;   else   {   printf("(%c,%d) ",'A'+i-1,con[i]);   flag=1;   }   map[con[i]][i]=1;   }   if(!flag)   printf("none\n\n");   else        printf("\n\n");}}

0 0
原创粉丝点击