标签:memset sizeof name scan 问题 二分图最大匹配 || 匹配 namespace
和棋盘游戏一个类型的题目
矩阵转换为二分图最大匹配问题 每次碰撞气球都是一行或一列
#include<bits/stdc++.h> using namespace std; #define MAXI 105 int mp[MAXI][MAXI]; int used[MAXI]; int vis[MAXI]; int n,m; int color[51]; bool dfs(int x,int color) { for(int j=1;j<=n;j++) { if(mp[x][j]==color&&!used[j]) { used[j]=1; if(!vis[j]||dfs(vis[j],color)) { vis[j]=x; return true; } } } return false; } int find1(int x) { int ans=0; memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++) { memset(used,0,sizeof(used)); if(dfs(i,x))ans++; } return ans; } int main() { int k; while(scanf("%d%d",&n,&k)==2&&(n||k)) { int ans[MAXI]; memset(color,0,sizeof(color)); memset(ans,0,sizeof(ans)); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { scanf("%d",&mp[i][j]); color[mp[i][j]]=1; } int n=0; for(int i=1;i<=50;i++) { if(color[i]) { if(k<find1(i)) ans[n++]=i; } } sort(ans,ans+n); if(n==0)printf("-1\n"); else { for(int i=0;i<n-1;i++) printf("%d ",ans[i]); printf("%d\n",ans[n-1]); } } return 0; }
标签:memset sizeof name scan 问题 二分图最大匹配 || 匹配 namespace
原文地址:https://www.cnblogs.com/bxd123/p/10364545.html