Pagini recente » Cod sursa (job #2238013) | Cod sursa (job #2444753) | Cod sursa (job #1867707) | Cod sursa (job #2250091) | Cod sursa (job #404639)
Cod sursa(job #404639)
#include <fstream>
#include <vector>
using namespace std;
int N1,N2,st[1000],dr[1000],nr,M,viz[1000];
vector <int > G[1000];
int cupleaza(int nod)
{
int i,vecini;
if (viz[nod]) return 0;
viz[nod]=1;
vecini=G[nod].size();
for(i=0;i<vecini;i++)
{
// if(!G[nod][i]) continue;
if (!dr[i+1]||cupleaza(dr[i+1]))
{st[nod]=i+1;
dr[i+1]=nod;
return 1;
}
}
return 0;
}
void cuplaj()
{
int i;
for(i=1;i<=N1;i++)
{
if (st[i]) continue;
if(cupleaza(i)) nr++;
else
{
memset(viz,0,sizeof(viz));
if (cupleaza(i)) nr++;
}
}
}
int main()
{int x,y,E,i;
ifstream f("cuplaj.in");
//****citire graf
f>>N1>>N2>>E;//N1 cardinalul primei multimi N2 cardinalul a celei de a doua multime
for(i=1;i<=E;i++)
{
f>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
}
f.close();
cuplaj();
ofstream g("cuplaj.out");
g<<nr<<"\n";
for(i=1;i<=nr;i++)
g<<st[i]<<" "<<dr[i]<<"\n";
g.close();
return 0;
}