Pagini recente » Niciomare | Cod sursa (job #1790816) | Cod sursa (job #2783507) | Cod sursa (job #46163) | Cod sursa (job #3074)
Cod sursa(job #3074)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define fin "harta.in"
#define fout "harta.out"
#define NMAX 101
int n,m,grad[NMAX][3],v[NMAX][NMAX];
FILE *in,*out;
//0 ext, 1 int
int main() {
register int i,j,y,aux[NMAX][2];
in=fopen(fin,"r"); out=fopen(fout,"w");
fscanf(in,"%i",&n);
for (i=1;i<=n;++i) {
fscanf(in,"%i%i",&grad[i][0],&grad[i][1]);
}
srand(time(0));
do {
for (i=1;i<=n;++i) {
aux[i][0]=grad[i][0];
aux[i][1]=grad[i][1];
}
for (i=1;i<=n;++i)
for (j=1;j<=n;++j) v[i][j]=0;
for (i=1;i<=n;++i) {
j=0;
while (aux[i][0]) {
y=rand()%n+1;
++j;
if (!v[i][y] /*&& !v[y][1]*/ && y!=i) {
v[i][y]=1;
aux[i][0]--;
aux[y][1]--;
}
}
}
for (j=1;j<=n && !aux[j][0] && !aux[j][1];++j);
} while (j<=n);
for (i=1;i<=n;++i)
for (j=1;j<=n;++j)
if (v[i][j]) ++m;
fprintf(out,"%i\n",m);
for (i=1;i<=n;i++)
for (j=1;j<=n;++j)
if (v[i][j])
fprintf(out,"%i %i\n",i,j);
fclose(in); fclose(out);
return 0;
}