Scrivere un funzione ricorsiva
che presa in input una stringa (ordinata lessicograficamente) stampi tutti i suoi
anagrammi (permutazioni di caratteri) ordinati in maniera lessicografica.
N.B. Ottimo per il gioco Geo Challenge di Facebook!!!!
 
/* http://juni0rblog.blogspot.com/ */
/*        juni0r87@yahoo.it        */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 255 /* massima  lunghezza di una parola */
void anagr(char *pref, char *string);
void anagrammi(char *string);
void elimina(char *string, char *temp, int k);
void attacca(char *string, char *temp, char c);
int main(){
    char string[MAX];
    scanf("%s", string);
    printf("n");
    anagrammi(string);
    return 0;
}
/* Stampa  tutte le parole ottenute concatenando la parola contenuta in
   prefisso con gli anagrammi della parola contenuta  in  word. */
void anagr(char *pref, char *string){
  int  stringl,k; 
  char newstring[MAX];
  char newpref[MAX];
  char c;
  int us['z'-'a'+1]={0}; 
 
  stringl = strlen(string);
  if (stringl == 0)
    printf("%sn", pref);
  else{
    for(k=0 ; k<stringl ; k++){
      c = string[k]; 
      if(us[c-'a'] == 0){
 us[c-'a'] = 1;
 attacca(newpref, pref, c);
 elimina(newstring, string, k);
 anagr(newpref, newstring);
      }
    }
  }
}
void anagrammi(char *string){
  anagr("", string); 
}
/*  Copia  in string  la parola ottenuta aggiungendo alla parola in
    temp il carattere c.*/
void attacca(char *string, char *temp, char c){
  int l;
  l = strlen(temp); 
  strcpy(string, temp);
  string[l] = c;
  string[l+1] = ''; /* aggiungo il carattere di fine stringa */
}
/* Copia in  word la parola ottenuta  togliendo dalla parola in 
   temp il carattere in  posizione k.*/
void elimina(char *string, char *temp, int k){
  int i,l;
  l = strlen(temp);
  for(i=0; i<k ; i++)
    string[i] = temp[i];
  for(i=k; i<l-1 ; i++)
    string[i] = temp[i+1];
  string[l-1]  = '';
}
Ricerca appunti sul web
 
  
    Ricerca personalizzata
  
sabato 28 febbraio 2009
Sorgenti c : Anagrammi
Pubblicato da
Baiox
alle
00:38
        
 
 
Etichette: Informatica, Programmazione C
Iscriviti a:
Commenti sul post (Atom)
0 commenti:
Posta un commento