Pagini recente » Cod sursa (job #2930607) | Cod sursa (job #1472267) | Cod sursa (job #3138312) | Cod sursa (job #992464) | Cod sursa (job #109839)
Cod sursa(job #109839)
#include<iostream.h>
#include<fstream.h>
#include<stdio.h>
int N,K;FILE *h;
struct nod{
long inf;
nod *leg;};
nod *cap1,*cap2;
void adauga_inc(nod *&cap,int x)
{nod *p;
p=new nod;
p->inf=x;
p->leg=cap;
cap=p;}
void adauga_sf(nod *&cap,int x)
{nod *p,*q;
if(!cap) adauga_inc(cap,x);
else {for(p=cap;p->leg!=NULL;p=p->leg);
q=new nod;
q->inf=x;
q->leg=NULL;
p->leg=q;}
}
void sterge(nod *&cap2)
{nod *q,*p;
for(q=cap2;q->leg->leg!=NULL;q=q->leg);
p=q->leg;
q->leg=NULL;
delete p;}
int valid(int i)
{nod *q;int j=1;
for(q=cap2;q!=NULL;q=q->leg)
if(q->inf==i) j++;
for(q=cap2;q->leg!=NULL;q=q->leg);
if(q->inf==i) return 0;
if(j>K) return 0;
return 1;}
void back(int p)
{int i;nod *q;
for(i=1;i<=N;i++)
{if(p==0&&i>1) cap2=NULL;
if(valid(i))
{adauga_sf(cap2,i);
if(p==N*K-1) {for(q=cap2;q!=NULL;q=q->leg)
{fprintf(h,"%d ",q->inf);}
fprintf(h,"\n");}
back(p+1);}}
sterge(cap2);
}
void main()
{cap1=NULL;cap2=NULL;
ifstream f("c:\\oij\\nkperm.in");
ofstream g("c:\\oij\\nkperm.out");
h=fopen("c:\\oij\\fis.txt","w+");
int T,i,l,j,z,y;char x;nod *p,*q;
f>>N>>K>>T;
back(0);
fclose(h);
for(i=0;i<T;i++)
{f>>x;
if(x=='A') {z=1;
for(i=0;i<N*K;i++)
{f>>l;adauga_sf(cap1,l);}
for(j=0;j<N*K;j++)
{fscanf(h,"%d",&l);adauga_sf(cap2,l);}
while(cap1->inf!=cap2->inf)
{cap2=NULL;
for(j=0;j<N*K;j++)
{fscanf(h,"%d",&l);adauga_sf(cap2,l);}
z++;}
p=cap1;q=cap2;
while(p!=NULL&&q!=NULL)
{if(p->inf!=q->inf) {cap2=NULL;
for(j=0;j<N*K;j++)
{fscanf(h,"%d",&l);adauga_sf(cap2,l);}
z++;q=cap2;p=cap1;}
else {p=p->leg;q=q->leg;}
}
g<<z<<endl;cap2=NULL;}
if(x=='B')
{f>>y;z=1;
cap2=NULL;
for(j=0;j<N*K;j++)
{fscanf(h,"%d",&l);adauga_sf(cap2,l);}
while(z!=y)
{cap2=NULL;
for(j=0;j<N*K;j++)
{fscanf(h,"%d",&l);adauga_sf(cap2,l);}
z++;}
for(p=cap2;p!=NULL;p=p->leg)
{g<<p->inf<<" ";}
g<<endl;cap2=NULL;}
}
}