我目前在使用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;
}
答案 0 :(得分:1)
我认为问题可能出在方法checkFriendsCircle
上。递归调用是checkFriendsCircle(user,user2.getFriends(),s);
而不是checkFriendsCircle(user2,user2.getFriends(),s);
。你实际上并没有检查多个友谊水平。