九野的博客,转载请注明出处:http://blog.csdn.net/acmmmm/article/details/12804253
给定矩阵,通过行变换或列变换使得主对角线元素都为1
对于矩阵,只需要 只使用列变换 或 只使用行变换 操作即可得到结果
输出列变换的 哪2列进行交换,按字典序
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<vector>
#define N 206
using namespace std;
int n;
int lef[N], pn;//lef[v]表示Y集的点v 当前连接的点
bool T[N]; //T[u] 表示Y集 u 是否已连接X集
vector<int>G[N]; //匹配边 G[X集].push_back(Y集) 注意G 初始化
bool match(int x){ // x和Y集 匹配 返回x点是否匹配成功
for(int i=0; i<G[x].size(); i++)
{
int v = G[x][i];
if(!T[v])
{
T[v] = true;
if(lef[v] == -1 || match( lef[v] )) //match(lef[v]) : 原本连接v的X集点 lef[v] 能不能和别人连,如果能 则v这个点就空出来和x连
{
lef[v] = x;
return true;
}
}