Cod sursa(job #118300)

Utilizator adrianaqtreus adriana adrianaqt Data 24 decembrie 2007 11:45:39
Problema Ordine Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<string.h>
#include<fstream.h>
ifstream f("ordine.in");
ofstream g("ordine.out");
typedef int stiva[100];
stiva st;
char a[100],c[100],b[100],min[100];
int n;
void init(int k)
{st[k]=0;}
int succesor(int k)
{  if(st[k]<n){st[k]++;
	       return 1;}
   else return 0;
}
int valid(int k)
{  for(int i=1;i<k;i++)
    if(st[i]==st[k])return 0;
    if(k>=2)
    if(a[st[k]]==a[st[k-1]])return 0;
   return 1;
}
int solutie(int k)
{ return k==n;}
int sub()
{ for(int i=2;i<=n;i++)
if(a[st[i]-1]==a[st[i-1]-1])return 0;
return 1;}
void minim()
{  for(int i=1;i<=strlen(a);i++)b[i-1]=a[st[i]-1];
 if(strcmp(b,min)<0)strcpy(min,b);}


 void back(int k)
 {   init(k);
       while(succesor(k))
       if(valid(k))
	if(solutie(k))
       {if(sub())minim();}
	else back(k+1);
 }
 int main()
 { f.get(a,100);
 strcpy(min,a);
 n=strlen(a);
 back(1);
 g<<min;
 return 0;}