2015-09-05 108 views
1

我目前有使用深度優先搜索算法的問題。該場景是該用戶有一個好友列表。並且只有在接收者是你的朋友或朋友朋友的朋友等的情況下才可以發送消息。然後你可以發送消息。有點像在Facebook上我猜。 我做了什麼至今:java中的深度優先搜索

public boolean sendMessage(Message message, User receiver) { 
     Stack s = new Stack(); 
     if(this.getFriends().size() > 0){ 
      return false; 
     }else if(this.getFriends().contains(receiver)){ 
      receiver.getMessagebox().add(message); 
      this.getMessagebox().add(message); 
      return true; 
     }else if(checkFriendsCircle(receiver,this,s)){ 
      receiver.getMessagebox().add(message); 
      this.getMessagebox().add(message); 
      return true; 
     }else{ 
      return false; 
     } 
    } 


private boolean checkFriendsCircle(User receiver, User user, Stack s){ 

     ArrayList<User> friendslist = user.getFriends(); 
     if(!s.contains(this)){ 
     s.push(this); 
     } 
     for (User user2 : friendslist) { 
      if(!s.contains(user2)){ 
      if(user2.getFriends().contains(receiver)){ 
       return true; 
      }else{ 
       checkFriendsCircle(receiver,user2,s); 

      } 
      } 
     } 

     return false; 
    } 
+1

究竟是什麼問題?順便說一句,我認爲這可能是第3行你想檢查'.size()<= 0' ... – sleepy42

+0

以及它不工作。那就是我的問題:) –

+0

順便謝謝!我完全錯過了它 –

回答

1

我認爲這個問題可能是與方法checkFriendsCircle。遞歸調用是checkFriendsCircle(user,user2.getFriends(),s);而不是checkFriendsCircle(user2,user2.getFriends(),s);。你實際上並沒有檢查一個以上的友誼。

+0

用戶是接收器,所以每次在遞歸調用我需要發送接收器,看看它是否存在 –

+0

...也許'checkFriendsCircle(...)'前面的'return'可以幫幫我。 – sleepy42

+0

對不起,我糾正了代碼。仍然有同樣的問題,雖然 –