zoukankan      html  css  js  c++  java
  • Swap HDU

    //把矩阵按行和列缩点,格子为1的就在所在行列加边
    //然后二分图求最大匹配,如果是n,代表可行,小于n就输出-1
    #include<cstdio>
    #include<cstring>
    using namespace std;
    typedef long long ll;
    const int N=100+10;
    int g[N][N];
    int match[N];
    bool used[N];
    int n;
    bool find(int u) {
    	for(int i=1; i<=n; i++) {
    		if(used[i]||!g[u][i]) continue;
    		used[i]=true;
    		if(match[i]==-1||find(match[i])) {
    			match[i]=u;
    			return true;
    		}
    	}
    	return false;
    }
    int solve() {
    	int res=0;
    	memset(match,-1,sizeof match);
    	for(int i=1; i<=n; i++) 
    	{
    		memset(used,false,sizeof(used));
    		if(find(i)) 
    			res++;
    	}
    	return res;
    }
    int a[N],b[N];
    int main() {
    	while(~scanf("%d",&n)) 
    	{
    		for(int i=1; i<=n; i++)
    			for(int j=1; j<=n; j++)
    				scanf("%d",&g[i][j]);
    		int num=solve();
    		if(num==n)
    		{
    			int m=0;
    			for(int i=1; i<=n; i++) 
    			{
    				while(match[i]!=i) 
    				{
    					a[m]=i;
    					b[m]=match[i];
    					m++;
    					int t=match[i];
    					match[i]=match[match[i]];
    					match[t]=t;
    				}
    			}
    			printf("%d
    ",m);
    			for(int i=0; i<m; i++)
    				printf("C %d %d
    ",a[i],b[i]);
    		} else 
    			printf("-1
    ");
    	}
    	return 0;
    }
    
    
  • 相关阅读:
    C语言文法
    实验一
    词法分析
    py中文词频统计
    py字符串练习
    py画了个国旗
    熟悉常用的Linux操作
    大数据概述
    实验三、 递归下降分析程序实验
    简易c语言LL(1)文法
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/12422680.html
Copyright © 2011-2022 走看看