luni, 17 decembrie 2012

Problema 37 (variante teza)

//Intre n persoane care stau pe scaune s-au iscat conflicte. Acestea stau pe scaune numerotate de la 1 la n. Scrieti un program care sa afiseze toate modurile posibile de reasezare a persoanelor astfel incat sa nu se gaseasca alaturi doua persoane in conflict.

#include<iostream.h>
int v[100],i,j,k,n,t;
char a[100][100];
void afisare()
{ int i;
t=t+1;
for(i=1;i<=n;i++)
{cout<<a[v[i]]<<' ';}
cout<<endl;}

int cont(int k)
{ for(i=1;i<=k-1;i++)
if(v[i]==v[k])
return 0;
if(abs(v[k]-v[k-1])==1)
return 0;
if(k==n && v[k]==v[1])
return 0;
return 1;}

void back(int k)
{int i;
for(i=1;i<=n;i++)
{v[k]=i;
if(cont(k)==1)
if(k==n)
afisare();
else
back(k+1);}}

int main()
{cout<<"n=";
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
back(1);
return 0;}

Niciun comentariu:

Trimiteți un comentariu