深度搜索java

时间:2015-09-05 19:43:42

标签: java algorithm

我目前在使用Deep first搜索算法时遇到问题。场景是用户有朋友列表。如果收件人是您的朋友或朋友朋友朋友朋友等,则只能发送消息。然后您可以发送消息。有点像在facebook我想。 到目前为止我做了什么:

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 个答案:

答案 0 :(得分:1)

我认为问题可能出在方法checkFriendsCircle上。递归调用是checkFriendsCircle(user,user2.getFriends(),s);而不是checkFriendsCircle(user2,user2.getFriends(),s);。你实际上并没有检查多个友谊水平。