Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的深度优先搜索_Java_Algorithm - Fatal编程技术网

java中的深度优先搜索

java中的深度优先搜索,java,algorithm,Java,Algorithm,我目前在使用深度优先搜索算法方面遇到问题。场景是用户有一个朋友列表。只有当接收者是您的朋友或朋友等时,才可能发送消息。。然后你就可以发送消息了。我想这有点像facebook。 到目前为止我所做的: public boolean sendMessage(Message message, User receiver) { Stack s = new Stack(); if(this.getFriends().size() > 0 ){ r

我目前在使用深度优先搜索算法方面遇到问题。场景是用户有一个朋友列表。只有当接收者是您的朋友或朋友等时,才可能发送消息。。然后你就可以发送消息了。我想这有点像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;
    }
公共布尔发送消息(消息消息,用户接收方){
堆栈s=新堆栈();
如果(this.getFriends().size()>0){
返回false;
}else if(this.getFriends().contains(receiver)){
receiver.getMessagebox().add(消息);
this.getMessagebox().add(message);
返回true;
}否则,如果(选中Friendscircle(接收器,此,s)){
receiver.getMessagebox().add(消息);
this.getMessagebox().add(message);
返回true;
}否则{
返回false;
}
}
私有布尔checkFriendsCircle(用户接收器、用户用户、堆栈){
ArrayList friendslist=user.getFriends();
如果(!s.contains(this)){
s、 推(这个);
}
for(用户user2:friendslist){
如果(!s.contains(user2)){
if(user2.getFriends().contains(receiver)){
返回true;
}否则{
检查FriendsCircle(接收器,用户2,s);
}
}
}
返回false;
}

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

你到底有什么问题?顺便说一句,我认为可能是在第3行中,您想检查
.size(),但它不起作用。这是我的问题:)对了,谢谢!我完全错过了ituser是接收器,所以每次在递归调用中我都需要发送接收器,看看它是否在那里。。。也许在
checkFriendsCircle(…)
前面的
return
会有所帮助。对不起,我更正了代码。还是有同样的问题,每次我需要发送接收者,这样我就可以看到他是否在某人列表中。在朋友列表上循环时,你循环列表friendslist,而不是递归调用中得到的friendslist。