2012-12-08 88 views
0

我試圖找到尋找朋友的最短路徑。如果人員X想要連接到人員Y,我想打印出最短路徑的朋友,以便X到達Y.每次運行代碼時,我都會得到空值。使用HashMaps和ArrayList的最短路徑(使用BFS)

公共無效最短(字符串第一,目標字符串){

HashMap<String, String> prev = new HashMap<String, String>(); 
    Queue<PersonNode> q = new LinkedList<PersonNode>(); 
    PersonNode firstPerson = hash.get(first); 

    firstPerson.visited = true; 
    prev.put(first, first + " "); 
    q.add(firstPerson); 

    while(!q.isEmpty()){  
     PersonNode curr = q.remove(); 

     if(!curr.visited){ 
      curr.visited = true; 
      if(curr.equals(target)){ 
       break; 
      } 
      else{ 
       for(int i =0; i < curr.list.size(); i++){ 
        if(curr.list.get(i).visited = false){ 
         q.add(curr.list.get(i)); 
         curr.list.get(i).visited = true; 
         prev.put(curr.list.get(i).name, prev.get(curr.list.get(i).name) + curr.list.get(i)); 

        } 
       } 

      } 
      if(!curr.equals(target)){ 
       System.out.println("They have no connections"); 
      } 

     } 
    } 
    System.out.println(prev.get(target)); 
} 

回答

0

嘗試調試代碼。我看到你在循環之外設置了firstperson.visitedtrue。然後你從隊列中彈出並忽略它,因爲它是true。在你的循環內部是一樣的:你設置所有訪問的屬性爲true,這將導致它們在運行時從隊列中彈出時被忽略

我還在考慮「它們沒有連接」不在循環內