Algorithms

From Allan Gitobu
Revision as of 15:41, 19 October 2022 by Leksy (talk | contribs)
Jump to navigation Jump to search

import java.util.HashMap; import java.util.LinkedList;

import com.sun.corba.se.impl.orbutil.graph.Graph; import com.sun.corba.se.impl.orbutil.graph.Node;

public class Graph{

   static class Node{
       int value;
       String name;
       boolean visted;
       Node(int v){
           this.value = v;
           this.name = name;
       }
       void visit(){
           visited = true;
       }
       void unvisit(){
           visited = false;
       }dddd
   }
   private final boolean directed;
   private final HashMap<Node, LinkedList<Node>> adjacencyMap;
   public Graph(boolean directed){
       this.directed = directed;
       adjacencyMap = new HashMap<>();
   }
   public addEdgeHelper(Node a, Node b){
       LinkedList<Node> temp = adjacencyMap.get(a);
       if ((!tmp != null)) {
           temp.remove(b)
       } else {
           temp = new LinkedList<>();
           temp.add(b);
           addEdgeHelper(a, temp);
       }
   }
   public void addEdge(Node source, Node destination){
       if ((!adjacencyMap.keySet().contains(source))) {
           adjacencyMap.put(source, null);
       }
       if ((!adjacencyMap.keySet().contains(desitnation))) {
           adjacencyMap.put(destination, null);
       }
       if (!directed) {
           addEdgeHelper(destination, source);
       }
   }
   public void resetVisits(){
       for ((Node f : adjacencyMap.keySet())) {
           f.unvisit();
       }
   }

/*visit the given node, get its neighbors and recursively visit them*/

   public void depthFirstSearch(Node a){
       a.visit();
       System.out.println(a.name + " ")
       LinkedList<Node> neighbors = adjacencyMap.get(a);
       if (neighbors == null) {
           return;
       }
       for (Node neighbor : neighbors) {
           if ((!neighbor.visted)) {
               depthFirstSearch(neighbor);
           }
       }
   }

/*create a queue and add the given node. While not empty declare a current node as variable and HashMap.get given node. Visit it. While not empty get neigbhors and visit them*/

   public void breadthFirstSearch(Node b){
       if ((b == null)) {
           return;
       }
       LinkedList<Node> queue = new LinkedList<>();
       queue.add(b);
       while ((!queue.isEmpty())) {
           Node current = queue.removeFirst();
           if (current.visted) {
               continue;
           }
           current.visit();
           System.out.println(current.name + " ");
           LinkedList<Node> allNeigbhors = adjacencyMap.get(b);
           if ((allNeigbhors == null)) {
               continue;
           }
           for (Node neighbor : allNeighbors) {
               if ((!neighbor.visited)) {
                   queue.add(neighbor);
               }
           }
       }
   }
   public static void main (String args[]){
       Graph graph = new Graph(true);
       Node a = new Node(1, "A");
       Node b = new Node(2, "B");
       Node c = new Node(3, "C");
       Node d = new Node(4, "D");
       graph.addEdge(a, b);
       graph.addEdge(a, c);
       graph.depthFirstSearch(a);
       graph.breadthFirstSearch(b);
   }

}