2015-12-04 5 views
1

Je souhaite lire le nombre de nœuds d'un fichier texte contenant uniquement des arêtes. Je ne veux pas ajouter en haut de mon fichier texte pour lire le nombre de sommets. Voici ce qui contient dans le fichier texte.Lecture du nombre de nœuds à partir d'un fichier texte dans le graphique

11 3 
2 3 
0 3 
1 4 
5 4 
5 7 
6 7 
7 8 
8 9 
9 10 
0 5 

Le problème est que je ne peux pas obtenir le nombre de nœuds à partir de la lecture d'un fichier. Je pensais si trouver la valeur maximale des noeuds et ajouter 1 s'il commence par 0. Mais encore je ne pourrais pas l'obtenir ainsi j'ai essayé en lisant le nextInt et compare avec un autre nextInt. Voici ce que je veux dire et ce qui est fait jusqu'ici.

public static int readNode(String mazeFile) { 
    int numNode = 0; 
    File mf = new File(mazeFile); 
    try { 
     Scanner scan = new Scanner(mf); 
     int arc = readLineCount(mf); 
     for (int i = 0; i < arc; i++) { 
      while (scan.hasNext()) { 
       int n1 = scan.nextInt(); 
       int n2 = scan.nextInt(); 
       if (n1 > n2) { 
        n2 = n1; 
        numNode = n2; 
       } else if (n1 < n2) { 
        n1 = n2; 
        numNode = n1; 
       } 
      } 
     } 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return numNode; 
} 

Dois-je changer quelque chose?

Répondre

1

Avec cette méthode, vous comptez toujours sur l'utilisateur pour donner le graphique avec des nombres de nœuds entiers consécutifs. Que faire si quelqu'un choisit un numéro de nœud de 1111111111 alors qu'il n'y a que 42 nœuds dans le graphique? Pour résoudre ce problème, pensez aux numéros de nœud en tant que symboles. J'ai également corrigé d'autres pratiques douteuses dans votre code. Mais je n'ai pas utilisé les fonctionnalités de Java 8, ce qui rendrait cela moins verbeux.

La sortie:

The graph has 12 nodes: 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] 
Adjacency list: 
{0=[3, 5], 1=[4], 2=[3], 5=[4, 7], 6=[7], 7=[8], 8=[9], 9=[10], 11=[3]} 
A preorder depth first visit starting from 0: 
Visiting 0 
Visiting 3 
Visiting 5 
Visiting 4 
Visiting 7 
Visiting 8 
Visiting 9 
Visiting 10 

NB par souci de concision, j'ai omis les subtilités de la production Java comme public/privé et getters/setters.

+0

Pouvez-vous fournir un code testable si possible? –

+0

@MCMadMoefat Ok, ça fonctionne maintenant. – Gene

+0

Merci beaucoup de m'avoir donné le code pour l'idée. Maintenant ça marche à cause de ça. –