Pagini recente » Cod sursa (job #578141) | Cod sursa (job #3200233) | Cod sursa (job #555039) | Cod sursa (job #1362586) | Cod sursa (job #268125)
Cod sursa(job #268125)
#include<stdio.h>
const int D=11;
const int N=23;
const int M=9;
int a[N][D],n,d,m,sol[N];
char disc[D];
int toate()
{
int i;
for(i=1;i<=d;i++)
if(!disc[i])
return 0;
return 1;
}
void afisare()
{
for(int i=1;i<=m;i++)
printf("%d ",sol[i]);
printf("\n");
}
void copie_disc(char aux[12], char disc[12])
{
for(int i=1;i<=d;i++)
aux[i]=disc[i];
}
void actualizare_disc(int i)
{
int j;
for(j=1;j<=a[i][0];j++)
disc[a[i][j]]=1;
}
void back(int k)//aleg al k-lea elev din echipa
{
if(k==m+1)
{
if(toate())//daca echipa curenta acopera toate disciplinele (char[i]==1 pt fiecare 1<=i<=d)
afisare();
return;
}
int i;
char aux[D];
for(i=sol[k-1]+1 ; i<=n-m+k ; ++i)
{
sol[k]=i;
copie_disc(aux,disc);
actualizare_disc(i);
back(k+1);
copie_disc(disc,aux);
}
}
int main()
{
int i,j;
freopen("pluricex.in","r",stdin);
freopen("pluricex.out","w",stdout);
scanf("%d%d%d",&n,&m,&d);
for(i=1;i<=n;++i)
{
scanf("%d",&a[i][0]);//la cate materii
for(j=1;j<=a[i][0];++j)
scanf("%d",&a[i][j]);
}
back(1);
return 0;
}