码迷,mamicode.com
首页 > 其他好文 > 详细

dfssd

时间:2015-09-29 07:38:42      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;

const int MAXN=505;
int nx,ny;
int g[MAXN][MAXN];
int cx[MAXN],cy[MAXN];
int mk[MAXN];
int n;
int ansFrom[MAXN],ansTo[MAXN];
int flag[MAXN];
int Tot;

int path(int u)
{
for(int v=1;v<=ny;v++)
{
if(g[u][v]&&!mk[v])
{
mk[v]=1;
if(cy[v]==-1||path(cy[v]))
{
cx[u]=v;
cy[v]=u;
return 1;
}
}
}
return 0;
}

int MaxMatch()
{
int res=0;
memset(cx,-1,sizeof(cx));
memset(cy,-1,sizeof(cy));
for(int i=1;i<=nx;i++)
{
if(cx[i]==-1)
{
memset(mk,0,sizeof(mk));
res=res+path(i);
}
}
return res;
}

int main()
{
while(~scanf("%d",&n)){
memset(g,0,sizeof g);
memset(flag,0,sizeof flag);
nx=n,ny=n;Tot=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
int x;
scanf("%d",&x);
if(x==1) g[i][j]=1;
}

if(MaxMatch()!=n) printf("-1\n");
else
{
int Ans=0; int tmp;
int f=0;
for(int i=1;i<=n;i++)
if(cx[i]==i)
flag[i]=1;

for(int i=1;i<=n;i++)
{

}
printf("%d\n",f);
for(int i=0;i<f;i++)
printf("R %d %d\n",ansFrom[i],ansTo[i]);
}}
return 0;
}

dfssd

标签:

原文地址:http://www.cnblogs.com/zufezzt/p/4845423.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!