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