2012-12-15 4 views
1

Je travaille sur un algorithme pour trouver tous les chemins entre deux nœuds dans un graphique. Ca y est, j'ai pu encoder tous les chemins dans un tableau de chaînes comme suit:Tableau de chaînes en Java

String []paths = new String[50]; 

Note: J'utilise un tableau de chaînes pour stocker les chemins, mais je peux les stocker dans toutes les autres données structure si nécessaire.

échantillon des données dans mon tableau serait quelque chose comme le tableau ci-dessous, notez que les lettres sont mes données les traits d'union utilisés pour la visualisation seulement:

----------- 
| A | B | C | 
----------- 
| D | E | | 
----------- 

Tout ce que je besoin est de traiter le tableau ci-dessus et sortie toutes les combinaisons que:

ABC 

AEC 

DBC 

DEC 

j'ai essayé de résoudre ce problème en utilisant l'approche itérative « boucles », mais j'échoué. Je pense que nous pourrions le faire avec récursivité, mais je ne suis pas sûr de savoir comment faire cela. En outre, je ne suis pas au courant s'il existe une structure de données qui traite de ce problème. Quelque chose de mieux pour stocker les chemins plutôt qu'un tableau de chaînes?

Quoi qu'il en soit, voici ce que je travaille avec des boucles:

String []temp = new String[100]; 
for(r=0; r<paths.length ;r++) 
    for(c=0; c<paths[r].length() ;c++) 
     for(j=c+1; j<paths[r].length() ;j+1) 
     temp[r] += paths[j]; 
+4

Je suis sûr que vous avez essayé quelque chose, mais il ne fonctionne pas, non? Pourriez-vous s'il vous plaît partager une partie de votre code? Cela vous aidera à résoudre le problème plus facilement. – dasblinkenlight

+5

Vous avez oublié d'ajouter la balise "S'il vous plaît, faites ma demande" – Bohemian

+1

@dasblinkenlight J'ai mis à jour la question. – user1899713

Répondre

1

Ainsi, l'expression régulière [AD][BE][C].

Ce serait aussi une meilleure structure de données: une rotation de 90 degrés des réseaux. Cela éliminerait la vérification des longueurs (ABC versus DE).

Néanmoins avec votre structure de données:

int maxPathLength = 3; // TODO calculate 
Set<String> results = new TreeSet<String>(); 
process(paths, "", 0); 

public void process(String[] paths, String prefix, int i, Set<String> results) { 
    if (i >= maxPathLength) { 
     System.out.println(prefix); 
     results.add(prefix); 
     return; 
    } 
    for (String s : paths) { 
     if (i < s.length()) { 
      process(paths, prefix + s.charAt(i), i + 1, results); 
     } 
    } 
} 
+0

Ajout de 'résultats'. –

Questions connexes