贪心算法是广度优先吗 (java广度优先算法)

解决的主要问题是:

1.我的朋友或者朋友的朋友里有没有亿万富翁。

2.我如何才能最快的认识到这位大佬。

如图所示:

我的朋友有张三,李四,王五。

张三的朋友赵六,田七(亿万富翁)。

红色圈内表示一度关系,黄色圈和红色圈之间表示二度关系。

编写一个广度优先搜索算法,广度优先算法

逐步向外延伸,先检查一度关系再检查二度关系是广度优先算法的基本逻辑。

再来用一张图表示之间的逻辑关系:

编写一个广度优先搜索算法,广度优先算法

代码实现:

检查时应该先检查我的朋友,再检查我朋友的朋友,代码如何实现那,Queue(队列)是个不错的选择,下面用Java写一段示例代码:

1.先定义朋友之间的关系

编写一个广度优先搜索算法,广度优先算法

2.搜索逻辑实现

编写一个广度优先搜索算法,广度优先算法

public class MiniTest {
    public static void main(String[] args) {

        //定义一个存放关系的对象
        Map<String, List> friendRelationshipBetween = new HashMap<>();

        //我的朋友
        List myFriend = new ArrayList();
        myFriend.add("zhangsan");
        myFriend.add("lisi");
        myFriend.add("wangwu");
        friendRelationshipBetween.put("myFriend",myFriend);

        //张三的朋友
        List zhangSanFriend = new ArrayList();
        zhangSanFriend.add("zhaoliu");
        zhangSanFriend.add("tianqi");
        friendRelationshipBetween.put("zhangsan",zhangSanFriend);

        //创建一个队列
        Queue<String> queue = new LinkedList();
        //把我的朋友加入队列
        myFriend.forEach(item ->{
            queue.offer(item+"");
        });

        //搜索实现
        boolean isWhile = true;
        while (isWhile){

            //poll()表示取出朋友并从队列里删除
            String name = queue.poll();
            //如果还有朋友进入逻辑
            if(name!=null){
                //如果找到了田七
                if("tianqi".equals(name)){
                    System.out.println("找到了亿万富翁田七!!!");
                    return;
                //如果这个人还有朋友就将他的朋友放入队列中
                }else if(friendRelationshipBetween.get(name) != null){
                    friendRelationshipBetween.get(name).forEach(item ->{
                        queue.offer(item+"");
                    });
                }
            //没有朋友则返回没有搜索到
            }else{
                System.out.println("你的朋友里面没有人是亿万富翁!!!");
                isWhile = false;
            }
        }
    }
}