Pagini recente » Cod sursa (job #2640377) | Cod sursa (job #3267432) | Cod sursa (job #225840) | Cod sursa (job #3123608) | Cod sursa (job #109691)
Cod sursa(job #109691)
#include<fstream.h>
int v[100],n,n2,sol[100],v2[100];
unsigned long nr,x;
ofstream g("nkperm.out");
int bkta(int k)
{int i,ok;
if(k==n2) {nr++;ok=1;
for(i=1;i<n2;i++) if(v2[i]!=sol[i]) {ok=0;break;}
if(ok) {g<<nr;g<<'\n';return 0;}
}
else
{for(i=1;i<=n;i++)
if((k>1)&&v[i]&&(sol[k-1]!=i))
{sol[k]=i;v[i]--;bkta(k+1);
v[i]++;
}
else if((k==1)&&(v[i])) {sol[k]=i;v[i]--;bkta(k+1);v[i]++;}
}
}
int bktb(int k)
{int i;
if(k==n2) {nr++;
if(nr==x) {for(i=1;i<n2;i++) g<<sol[i]<<" ";g<<'\n';return 0;}
}
else
{for(i=1;i<=n;i++)
if((k>1)&&v[i]&&(sol[k-1]!=i))
{sol[k]=i;v[i]--;bktb(k+1);
v[i]++;
}
else if((k==1)&&(v[i])) {sol[k]=i;v[i]--;bktb(k+1);v[i]++;}
}
}
int main()
{ifstream f("nkperm.in");
int k,i,t,j;
char c;
f>>n>>k>>t;
n2=n*k+1;
for(i=1;i<=t;i++)
{f>>c;
if(c=='A')
{for(j=1;j<n2;j++) f>>v2[j];
for(j=1;j<n2;j++) v[j]=k;
nr=0;bkta(1);
}
else
{f>>x;for(j=1;j<n2;j++) v[j]=k;
nr=0;bktb(1);
}
}
f.close();
g.close();
return 0;
}