2015-09-05 107 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

对不起,我纠正了代码。仍然有同样的问题,虽然 –