Question & Answer: Please Help fast! I need to create a function for an network. Please only create and name it as it is. For example,…..

Please Help fast! I need to create a function for an network. Please only create and name it as it is. For example, undirectedgraph(), findDistance(a)

1. undirectedgraph() method creates a undirected graph

2. findDistance(a) – method computes the distance oto each vertex from a

Expert Answer

The Function code for undirectedgraph() in JAVA is as follows:

 public UndirectedGraph(java.util.Scanner sc){
        //Scan the number of vertices in the graph
        this.v = sc.nextInt();
        this.adjMap = new HashMap<>();
        System.out.print(sc.nextLine());  //Set the scanner to the next line.

        while(sc.hasNext()){
            String input = sc.nextLine();
            StringTokenizer strToken = new StringTokenizer(input);
            int count = strToken.countTokens();

            //DEBUG
            //System.out.println(input + " " + count);

            int[] arr = new int[count];
            for(int i = 0; i < count; ++i){
                arr[i] = Integer.parseInt(strToken.nextToken());
            }

            //arr[0] is the number of the vertex
            adjMap.put(arr[0], new Vertex());
            for(int i = 1; i < count; ++i){
                adjMap.get(arr[0]).addNeighbour(arr[i]);
                //System.out.println(arr[i]);
            }
        }
        e = edges();
    }

The Full Code for Create the Undirected Graph in JAVA is Follows:

/**

Note: Please mention your package name.

*/

package graphs;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.StringTokenizer;

public class UndirectedGraph implements Graph{
    /**
     * Number of vertices in the graph.
     */
    private int v;

    /**
     * Number of edges in the graph.
     */
    private int e;

    /**
     * The graph is a mapping from the 'vertex number ' to a instance 
     * of the class 'Vertex'.
     * The Vertex is a collection of 'vertex numbers ' of vertices
     * adjacent to itself.
     */
    private Map<Integer, Vertex> adjMap;

    /**
     * Construct a new undirected graph with 'n' vertices.
     * @param n The number of vertices.
     */
    public UndirectedGraph(int n){
        this.v = n;
        this.adjMap = new HashMap<>();
        for(int i = 1; i <= v; ++i){
            adjMap.put(i, new Vertex());
        }
    }

    /**
     * Construct a graph as a copy of another graph.
     * @param rhs The graph to copy.
     */
    public UndirectedGraph(UndirectedGraph rhs){
        this.v = rhs.v;
        this.e = rhs.e;
        this.adjMap = new HashMap<>();
        for(Map.Entry<Integer, Vertex> entry: rhs.adjMap.entrySet()){
            this.adjMap.put(entry.getKey(), new Vertex(entry.getValue()));
        }
    }

    /**
     * Construct a graph from a Scanner.
     * @param sc The scanner.
     */
    public UndiectedrGraph(java.util.Scanner sc){
        //Scan the number of vertices in the graph
        this.v = sc.nextInt();
        this.adjMap = new HashMap<>();
        System.out.print(sc.nextLine());  //Set the scanner to the next line.

        while(sc.hasNext()){
            String input = sc.nextLine();
            StringTokenizer strToken = new StringTokenizer(input);
            int count = strToken.countTokens();

            //DEBUG
            //System.out.println(input + " " + count);

            int[] arr = new int[count];
            for(int i = 0; i < count; ++i){
                arr[i] = Integer.parseInt(strToken.nextToken());
            }

            //arr[0] is the number of the vertex
            adjMap.put(arr[0], new Vertex());
            for(int i = 1; i < count; ++i){
                adjMap.get(arr[0]).addNeighbour(arr[i]);
                //System.out.println(arr[i]);
            }
        }
        e = edges();
    }

    /**
     * Custom Exception type which flags exceptions due to
     * improper use of 'vertex numbers '.
     */
    class NoSuchVertexException extends RuntimeException{
        public NoSuchVertexException(String no_such_vertex) {
            super(no_such_vertex);
        }
    }

    /**
     * Custom exception type which flags exception due to 
     * bad edge specifications.
     */
    class BadEdgeException extends RuntimeException{
        public BadEdgeException(String bad_edge){
            super(bad_edge);
        }
    }

    /**
     * Add a edge between Vertex v1 and Vertex v2.
     * @param v1
     * @param v2 
     */
    @Override
    public void addEdge(int v1, int v2){
        if(!hasVertex(v1) || !hasVertex(v2))
            throw new NoSuchVertexException("No such vertex!");
        adjMap.get(v1).addNeighbour(v2);
        adjMap.get(v2).addNeighbour(v1);
    }

    /**
     * Remove a edge between Vertex v1 and Vertex v2.
     * @param v1
     * @param v2 
     */
    @Override
    public void removeEdge(int v1, int v2){
        if(!edgeExists(v1, v2))
            throw new BadEdgeException("Such an edge does not exist!");
        else{
            adjMap.get(v1).removeNeighbour(v2);
            adjMap.get(v2).removeNeighbour(v1);
        }
    }

    /**
     * Count the total number of edges.
     * @return Integer specifying the total number of edges in the graph.
     */
    private int edges(){
        int total = 0;
        for(Vertex v : adjMap.values()){
            total += v.noOfNeighbours();
        }
        return total / 2;
    }

    /**
     * The number of edges in the graph.
     * @return 'e' which denotes |E| of the graph.
     */
    @Override
    public int numberOfEdges(){
        return e;
    }

    /**
     * The number of vertices in the graph.
     * @return 'v' which denotes |V| of the graph.
     */
    @Override
    public int size(){
        return v;
    }

    /**
     * Determines if a edge exists between Vertex v1 and Vertex v2.
     * @param v1    First Vertex.
     * @param v2    Second Vertex.
     * @return true/false.
     */
    @Override
    public boolean edgeExists(int v1, int v2){
        return adjMap.containsKey(v1) && adjMap.containsKey(v2) &&
                adjMap.get(v1).isNeighbour(v2) && 
                adjMap.get(v2).isNeighbour(v1);
    }

    /**
     * Determines if 'v' is a valid vertex number.
     * @param v
     * @return true/false.
     */
    @Override
    public boolean hasVertex(int v){
        return adjMap.containsKey(v);
    }

    /**
     * Contract the edge between Vertex v1 and Vertex v2.
     * Removes Vertex v2 from the graph.
     * @param v1    First Vertex.
     * @param v2    Second Vertex.
     */
    private void contractEdge(int v1, int v2){
        //System.out.println(v1 + " " + v2);
        if(!hasVertex(v1) || !hasVertex(v2))
            throw new NoSuchVertexException("Invalid vertex!");
        else if(!edgeExists(v1, v2))
            throw new BadEdgeException("Such an edge does not exist!");
        else{
            //remove all v1 from v2 and all v2 from v1.
            adjMap.get(v1).removeAll(v2);
            adjMap.get(v2).removeAll(v1);

            //append list of v2 to v1.
            adjMap.get(v1).append(adjMap.get(v2));

            //remove v2 from the map.
            adjMap.remove(v2);

            //replace all occurences of v2 with v1 in the graph.
            for(Vertex vr : adjMap.values()){
                vr.replaceAll(v1, v2);
            }

            //update v and e
            v = adjMap.size();
            e = edges();
        }
    }

    /**
     * Determine a random cut of the graph.
     * @return The number of crossing edges in the random cut.
     */
    public int Cut(){
        UndirectedGraph copy = new UndiectedrGraph(this);
        while(copy.size() > 2){
            int v1, v2;
            do{
                ArrayList<Integer> keys = new ArrayList<>(copy.adjMap.keySet());
                Random r = new Random();
                v1 = keys.get(r.nextInt(copy.size()));
                v2 = keys.get(r.nextInt(copy.size()));
            }
            while(!copy.edgeExists(v1, v2));

            copy.contractEdge(v1, v2);
        }
        return copy.numberOfEdges();
    }

    /**
     * Determine the minimum cut of the graph using Karger's algorithm.
     * @return The number of crossing edges in the minimum cut.
     */
    public int minCut(){
        int answer = this.numberOfEdges();
        System.out.println(this.size());
        for(int i = 0; i < this.size() * this.size() * 2; ++i)
            answer = Math.min(answer, this.Cut());
        return answer;
    }

    /**
     * Print the graph.
     */
    @Override
    public void print(){
        System.out.println("The Graph:- ");
        for(Map.Entry<Integer, Vertex> entry : adjMap.entrySet()){
            System.out.print(entry.getKey() + " -> ");
            for(Integer i : entry.getValue())
                System.out.print(i + " ");
            System.out.println("n");
        }
    }
}

You have to create two more java files to implement this i.e. Graph.java and Vertex.java that are as follows:

Graph.java:

package graphs;


public interface Graph {
    int numberOfEdges();
    int size();
    boolean edgeExists(int a, int b);
    boolean hasVertex(int v);
    void removeEdge(int a, int b);
    void addEdge(int a, int b);
    void print();
}

Vertex.java

package graphs;

import java.util.ArrayList;
import java.util.Iterator;

class Vertex implements Iterable<Integer>{
    /**
     * Used for search algorithms.
     */
    private boolean visited;

    /**
     * List of vertices adjacent to this vertex.
     */
    private ArrayList<Integer> neighbours;

    /**
     * No parameter constructor.
     */
    public Vertex(){
        this.visited = false;
        this.neighbours = new ArrayList<>();
    }

    /**
     * Copy a vertex.(Deep copy)
     * @param rhs The vertex to copy from.
     */
    public Vertex(Vertex rhs){
        this.visited = rhs.visited;
        this.neighbours = new ArrayList<>(rhs.neighbours);
    }

    /**
     * Check to see if the vertex is marked as visited.
     * @return true/false
     */
    public boolean isVisited(){
        return visited;
    }

    /**
     * Remove a vertex from the list of neighbor.
     * @param v The vertex to remove.
     */
    public void removeNeighbour(int v){
        this.neighbours.remove(v);
    }

    /**
     * 
     * @return The number of neighbors to this vertex.
     */
    public int noOfNeighbours(){
        return this.neighbours.size();
    }

    /**
     * Checks if 'v' is a neighbor of this vertex.
     * @param v The vertex in question.
     * @return true/false
     */
    public boolean isNeighbour(int v){
        return this.neighbours.contains(v);
    }

    /**
     * Adds a new neighbor.
     * @param v The vertex to be added.
     */
    public void addNeighbour(int v){
        this.neighbours.add(v);
    }

    /**
     * Become neighbors with all the neighbors of 'other'
     * @param other The vertex in question.
     */
    public void append(Vertex other){
        for(int i : other){
            this.neighbours.add(i);
        }
    }

    /**
     * Remove all edges with 'v'.
     * @param v
     */
    public void removeAll(int v){
        this.neighbours.removeIf(x -> x == v);
    }

    /**
     * Replace all 'v2' with 'v1'.
     * @param v1    The substitute vertex.
     * @param v2    The vertex to be substituted.
     */
    public void replaceAll(int v1, int v2){
        this.neighbours.replaceAll(x -> { if(x == v2) return v1; else return x; });
    }

    /**
     * Mark the vertex as visited.
     * @param b 
     */
    public void setVisited(boolean b){
        this.visited = b;
    }

    @Override
    public Iterator<Integer> iterator(){
        return this.neighbours.iterator();
    }
}

Java function for Find distance finddistance() is as follows:

finddistance(int a)

System.out.println(“Enter the source “);

source = a;

System.out.println(“Enter the destination “);

destination = scan.nextInt();

Dijkstras_Shortest_Path dijkstrasAlgorithm = new Dijkstras_Shortest_Path(number_of_vertices);

dijkstrasAlgorithm.dijkstra_algorithm(adjacency_matrix, source);

System.out.println(“The Shorted Path from ” + source + ” to ” + destination + ” is: “);

for (int i = 1; i <= dijkstrasAlgorithm.distances.length – 1; i++)

{

if (i == destination)

System.out.println(source + ” to ” + i + ” is “+ dijkstrasAlgorithm.distances[i]);

}

Still stressed from student homework?
Get quality assistance from academic writers!