Cod sursa(job #488708)

Utilizator nicoleta.maziluNicoleta Mazilu nicoleta.mazilu Data 29 septembrie 2010 19:32:36
Problema Taramul Nicaieri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<fstream.h>

ifstream f("harta.in");
ofstream g("harta.out");

int n, i, j, p, iese[101], intra[101], dim;

typedef struct
{
	int st, dr;
}Muchie;

Muchie ST[101];

int valid()
{
	int nr = 0;
	if(ST[p].st == ST[p].dr)
		return 0;
	for(i = 1; i < p; i++)
	{
		if(ST[i].st == ST[p].st && ST[i].dr == ST[p].dr)
			return 0;
		if(ST[i].dr == ST[p].dr)
		{
			nr++;
			if(nr > intra[p])
				return 0;
		}
	}
	return 1;
}

int final()
{
	return p == dim;
}

void tipareste()
{
	for(i = 1; i <= dim; i++)
		g << ST[i].st << ' ' << ST[i].dr << '\n';
}

void back()
{
	p = 1;
	while(p)
		if(ST[p].dr < n)
		{
			ST[p].dr++;
			if(valid())
				if(final())
				{
					tipareste();
					p = 0;
				}
				else
					p++;
		}
		else
		{
			ST[p].dr = 0;
			p--;
		}
}
	
int main()
{
	f >> n;
	for(i = 1; i <= n; i++)
		f >> iese[i] >> intra[i];
	for(i = 1; i <= n; i++)
	{
		for(j = 1; j <= iese[i]; j++)
		{
			dim++;
			ST[dim].st = i;
		}
	}
	back();
	f.close();
	g.close();
	return 0;
}