Cod sursa(job #298003)

Utilizator edy_3dzEdy 3dz edy_3dz Data 5 aprilie 2009 19:19:58
Problema Triang Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.42 kb
/*#include <fstream>
#include <iostream>

using namespace std;

int n,nr,nt=0,c[9];

void GenComb(int k);
void prelucrare();

int main()
{
    ifstream f("triang.in");
    f>>n;
    f.close();
    int i;
    nr=n-3;
    struct diagonale
    {
        int a;
        int b;
    } d[45];
    for (i=1;i<=nr;i++)
    {
        d[++nt].a=1;
        d[nt].b=i+2;
    }
    while (nr)
    {
        for (i=n-nr+1;i<=n;i++)
        {
            d[++nt].a=n-nr-1;
            d[nt].b=i;
        }
        nr--;
    }
    for (i=1;i<=nt;i++)
     cout<<d[i].a<<" "<<d[i].b<<endl;
    cout<<endl;
    GenComb(1);
    return 0;
}

void GenComb (int k)
{
    if (k-1==nr)
     prelucrare();
    else
        for (int i=c[k-1]+1;i<=nt-nr+k; i++)
        {
         c[k]=i;
         GenComb(k+1);
        }


}

void prelucrare()
{
 for (int i=1;i<=nr;i++)
  cout<<c[i]<<" ";
 cout<<endl;
}*/
// 90 puncte --> n=11 crapa timpu :-<

#include<fstream.h>

int n,k=0,st[15],ds[50],df[50],a[50][50];

ofstream fout("triang.out");

void bkt(int l)
{
 int i,i2,j,flag;
	if(l==n-3)
		{
			flag=0;
			for(i=1;i<=n-4;i++)
				for(j=i+1;j<=n-3;j++)
					if(a[st[i]][st[j]]!=1)
						{flag=1;break;}
			if(!flag)
				{
					for(i=1;i<=n-3;i++)
						fout<<ds[st[i]]<<" "<<df[st[i]]<<"  ";
					fout<<"\n";
				}
		}

	else
		for(i=st[l]+1;i<=k;i++)
		{
		   /* int flag2=1;
		    for(i2=1;i2<l&&flag2==1;i2++)
		     for (j=i+1;j<=l&&flag2==1;j++)
		      if(!a[st[i2]][st[j]]) flag2=0;
		   if(flag2)*/
			{
			    st[l+1]=i;
                bkt(l+1);
			}
		}
}

int main()
{
 ifstream fin("triang.in");
 int i,j;
 //fin>>n;
 n=5;
 fin.close();
 if(n<3)
	fout<<0;
 if(n==3)fout<<1;
 if(n>3)
	{
		for(i=3;i<=n-1;i++)
			{ds[++k]=1;df[k]=i;}
		for(i=2;i<=n-2;i++)
			for(j=i+2;j<=n;j++)
				{ds[++k]=i;df[k]=j;}
		memset(a,0,sizeof(a));
		for(i=1;i<k;i++)
			for(j=i+1;j<=k;j++)
				{
					if((ds[i]>ds[j] && ds[i]<df[j] || df[i]>ds[j] && df[i]<df[j]) && ds[i]!=ds[j] && df[i]!=df[j] && ds[i]!=df[j] && ds[j]!=df[i])
						a[i][j]=0;
					else
						a[i][j]=1;
				}
		switch(n){
		case 4: fout<<"2 \n";break;
		case 5: fout<<"5 \n";break;
		case 6: fout<<"14 \n";break;
		case 7: fout<<"42 \n";break;
		case 8: fout<<"132 \n";break;
		case 9: fout<<"429 \n";break;
		case 10: fout<<"1430 \n";break;
		case 11: fout<<"4862 \n";break;  }
		bkt(0);

	}
return 0;
}