-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathBreadthFirstSearch.java
68 lines (57 loc) · 2.74 KB
/
BreadthFirstSearch.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package breadth_first_search.java;
import java.util.*;
/**
* Реализация алгоритма BFS.
* Задача. Найти продавца (из списка контактов), который
* продает замечательные манго.
*/
public class BreadthFirstSearch {
// Создать хеш-таблицу (для реализации графа)
private static final Map<String, List<String>> graph = new HashMap<>();
private static boolean search(String name) {
// Создать двунаправленную очередь
Queue<String> searchQueue = new ArrayDeque<>(graph.get(name));
// Список для отслеживания уже проверенных людей
List<String> searched = new ArrayList<>();
while (!searchQueue.isEmpty()) { // <--- Пока очередь не пуста
// Извлекаем первого человека
String person = searchQueue.poll();
// Чеповек проверяется топько в том спучае,
// если он не проверялся ранее
if (!searched.contains(person)) {
if (person_is_seller(person)) {
System.out.println(person + " is a mango seller!");
} else {
// Все друзья этого человека добавляются
// в очередь поиска
searchQueue.addAll(graph.get(person));
// Человек помечается как проверенный
searched.add(person);
}
}
}
return false;
}
/**
* Проверяет, является ли человек продавцом манго
* @param name имя человека
* @return true - человек является продавцом (имя заканчивается
* на букву m),
* false - человек НЕ является продавцом манго
*/
private static boolean person_is_seller(String name) {
return name.endsWith("m");
}
public static void main(String[] args) {
// Создать граф
graph.put("you", Arrays.asList("alice", "bob", "claire"));
graph.put("bob", Arrays.asList("anuj", "peggy"));
graph.put("alice", List.of("peggy"));
graph.put("claire", Arrays.asList("thom", "jonny"));
graph.put("anuj", Collections.emptyList());
graph.put("peggy", Collections.emptyList());
graph.put("thom", Collections.emptyList());
graph.put("jonny", Collections.emptyList());
search("you");
}
}