Pagini recente » Cod sursa (job #1709461) | Cod sursa (job #1532767) | Cod sursa (job #2287196) | Cod sursa (job #2284032) | Cod sursa (job #150117)
Cod sursa(job #150117)
#include<fstream.h>
#define max 1005
int s[max+1], k, n, m, nr_sol, mn;
char a[max][max], uz[max];
ifstream f("dusman.in");
ofstream g("dusman.out");
void back();
void write();
void read();
int corect(int o);
int sol(int o);
int min(int o);
int main()
{ read();
back();
g.close();
return 0;
}
void back()
{ int i;
i=1; s[i]=0; nr_sol=0; mn=32000;
while(k!=0)
if(s[i]<n)
{ s[i]++;
if(corect(i))
{ nr_sol+=sol(i);
mn=min(i);
if(nr_sol==k)
{ write();
return;
}
else
{ if(i<n)
{ i++;
s[i]=mn;
}
}
}
}
else
i--;
}
int corect(int o)
{ int i, ok=1;
for(i=1; i<o; i++)
if(s[o]==s[i])
{ ok=0; break;
}
if(a[s[o]][s[o-1]])
ok=0;
return ok;
}
int sol(int o)
{ if(o==n)
return 1;
return 0;
}
int min(int o)
{ int i;
for(i=1; i<=n; i++)
{ uz[i]=0;
}
for(i=1; i<o; i++)
uz[s[i]]=1;
for(i=1; i<n; i++)
if(uz[i]==0)
return i-1;
return n;
}
void read()
{ int i, x, y;
f>>n>>k>>m;
for(i=0; i<m; i++)
{ f>>x>>y;
a[x][y]=1;
a[y][x]=1;
}
}
void write()
{ int i;
for(i=1; i<=n; i++)
{ g<<s[i]<<' ';
}
}