Pagini recente » Cod sursa (job #440719) | Cod sursa (job #2210233) | Autentificare | Cod sursa (job #1813106) | Cod sursa (job #1199203)
#include <stdio.h>
#include <string.h>
struct ports{
int port[10];
};
int N,M,K; ports C[120],E[120]; int l[120], r[120],viz[120];
bool graf[120][120];
bool cupleaza(int nod){
if (viz[nod]) return (false);
viz[nod]=1;
int i;
for (i=1; i<=M; i++)
if ((graf[nod][i]) && (!r[i])) {
l[nod]=i;
r[i]=nod;
return (true);
}
for (i=1; i<=M; i++)
if ((graf[nod][i]) && (cupleaza(r[i]))) {
l[nod]=i;
r[i]=nod;
return (true);
}
return (false);
}
int main(){
int i,j,k,t;
char c;
freopen("cuplaj.txt","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d %d %d",&N,&M,&K);
// memset(C,0,sizeof(C));
//memset(E,0,sizeof(E));
memset(l,0,sizeof(l));
memset(r,0,sizeof(r));
/* for (i=1; i<=N; i++){
c=' ';
while (c!='\n'){
scanf("%d",&C[i].port[++C[i].port[0]]);
scanf("%c",&c);
}
}
for (i=1; i<=M; i++){
c=' ';
while ((c!='\n') && (!feof(stdin))) {
scanf("%d",&E[i].port[++E[i].port[0]]);
scanf("%c",&c);
}
}*/
int x,y;
for (i=1; i<=K; i++){
scanf("%d %d",&x,&y);
graf[x][y]=1;
}
/*memset(graf,0,sizeof(graf));
for (i=1; i<=M; i++)
for (j=1; j<=N; j++)
for (k=1; k<=E[i].port[0]; k++)
for (t=1; t<=C[j].port[0]; t++)
if (E[i].port[k]==C[j].port[t]) graf[i][j]=1;*/
bool ok=true;
while (ok){
ok=false;
memset(viz,0,sizeof(viz));
for (i=1; i<=N; i++) if (!l[i]) ok=ok||cupleaza(i);
}
int sol=0;
for (i=1; i<=N; i++) if (l[i]) ++sol;
printf("%d\n",sol);
for (i=1; i<=N; i++) if (l[i]) printf("%d %d\n",i,l[i]);
return 0;
}