Cod sursa(job #623467)

Utilizator GrimpowRadu Andrei Grimpow Data 19 octombrie 2011 22:48:12
Problema Dusman Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include<fstream>
#include<stdio.h>

using namespace std;
int a[1000],dusm[1000][3],cnt=0,n,k,m,j,x,y;


int verificare(int p,int poz)
{
    for(j=0;j<poz;j++)
       if(a[j]==p) return 0;
    if(dusm[a[poz-1]][0]==p||dusm[a[poz-1]][1]==p||dusm[a[poz-1]][2]==p) return 0;
    return 1;
}

void afis()
{
    FILE *g=fopen("dusman.out","wt");
    //ofstream g("dusman.out");
    /*for(i=1;i<=n;i++)
    {

    g<<'\n';
       for(j=0;j<3;j++)
       g<<dusm[i][j]<<' ';
    }*/
    for(int i=0;i<n;i++)
    fprintf(g,"%i ",a[i]);
    fclose(g);




}

void back(int poz)
{
    for(int i=1;i<=n&&cnt<k;i++)
    {
        if(verificare(i,poz))
          {
              a[poz]=i;
              if (poz==n-1)
                 cnt++;
              else back(poz+1);
          }


        /*a[poz]=i;
        if(poz==n)
        {
            afis();
            if(verificare(poz)==1)
              cnt++;


        }
        if(verificare(poz)==1&&poz<n)
          back(poz+1);

*/
    }

}






int main()
{
    ifstream f("dusman.in");
    f>>n>>k>>m;
    for(int i=0;i<=n;i++)
       for(j=0;j<3;j++)
       dusm[i][j]=-1;
    for(int i=0;i<m;i++)
       {
           f>>x>>y;
           if(dusm[x][0]==-1) dusm[x][0]=y;
           else if(dusm[x][1]==-1) dusm[x][1]=y;
           else if(dusm[x][2]==-1) dusm[x][2]=y;
           if(dusm[y][0]==-1) dusm[y][0]=x;
           else if(dusm[y][1]==-1) dusm[y][1]=x;
           else if(dusm[y][2]==-1) dusm[y][2]=x;
        }
    f.close();
    back(0);
    afis();






}