图广度优先搜索和深度优先搜索
class Graph{
private Map<Integer, List<Integer>> adjList;
public Graph(){
adjList=new HashMap<>();
}
public void addEdge(int src,int dest){
adjList.putIfAbsent(src,new ArrayList<>());
adjList.get(src).add(dest);
adjList.putIfAbsent(dest,new ArrayList<>());
adjList.get(dest).add(src);
}
public void bfs(int startNode){
Queue<Integer> queue=new LinkedList<>();
Set<Integer> visited=new HashSet<>();
visited.add(startNode);
queue.add(startNode);
while(!queue.isEmpty()){
int currentNode=queue.poll();
System.out.println(currentNode+" ");
for (int neighbor:
adjList.getOrDefault(currentNode,Collections.emptyList())) {
if(!visited.contains(neighbor)){
visited.add(neighbor);
queue.add(neighbor);
}
}
}
}
public void dfs(int startNode){
boolean[] visited=new boolean[adjList.size()];
dfsUtil(startNode,visited);
}
private void dfsUtil(int vertex,boolean[] visited){
visited[vertex]=true;
System.out.println(vertex+" ");
List<Integer> neighbor = adjList.get(vertex);
for (int neibor:
neighbor) {
if(!visited[neibor]){
dfsUtil(neibor,visited);
}
}
}
}