Advertisement
Guest User

ER

a guest
Oct 16th, 2019
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.58 KB | None | 0 0
  1.  
  2. import java.io.File;
  3. import java.io.FileNotFoundException;
  4. import java.util.Scanner;
  5.  
  6. /**
  7.  * @author Mohammed Julfikar Ali Mahbub
  8.  */
  9. public class Task01 {
  10.    
  11.     public static void main(String[] args) {
  12.         File file = new File(System.getProperty("user.dir") + "/src/Graph.txt");
  13.         Scanner sc = null;
  14.         try {
  15.             sc = new Scanner(file);
  16.         } catch (FileNotFoundException fnfe) {
  17.             System.out.println("File not found: " + fnfe.getMessage());
  18.         }
  19.         int n = sc.nextInt(), e = sc.nextInt();
  20.         Graph graph = new Graph(n);
  21.         for (int edge = 0; edge < e; edge++) {
  22.             int a = sc.nextInt(), b = sc.nextInt();
  23.             graph.join(a, b);
  24.         }
  25.  
  26.         graph.findSolution();
  27.     }
  28. }
  29.  
  30. class Graph {
  31.  
  32.     Vertex[] list;
  33.     int[][] matrix;
  34.     int size;
  35.  
  36.     public Graph(int size) {
  37.         if (size > 500) {
  38.             size = 500;
  39.         }
  40.         size++;
  41.         list = new Vertex[size];
  42.         matrix = new int[size][size];
  43.         for (int i = 0; i < size; i++) {
  44.             create();
  45.         }
  46.     }
  47.  
  48.     public void create() {
  49.         list[size++] = new Vertex();
  50.     }
  51.  
  52.     public void join(int start, int end) {
  53.         matrix[start][end] = 1;
  54.     }
  55.  
  56.     public void findSolution() {
  57.         int[] disc = new int[list.length - 1];
  58.         int[] proc = new int[list.length - 1];
  59.         int[] idx = new int[2];
  60.         DFS_Visit(1, disc, proc, idx);
  61.         System.out.println("Discovered Nodes:");
  62.         for (int i = 0; i < disc.length - 1; i++) {
  63.             System.out.print(disc[i] + ", ");
  64.         }
  65.         System.out.println(disc[disc.length - 1]);
  66.        
  67.         System.out.println("\nProcessed Nodes:");
  68.         for (int i = 0; i < disc.length - 1; i++) {
  69.             System.out.print(proc[i] + ",0 ");
  70.         }
  71.         System.out.println(proc[proc.length - 1]);
  72.         reset();
  73.     }
  74.  
  75.     public void DFS_Visit(int id, int[] disc, int[] proc, int[] idx) {
  76.         list[id].visit();
  77.         disc[idx[0]++] = id;
  78.         for (int i = 0; i < list.length; i++) {
  79.             if (matrix[id][i] == 1 && !list[i].visited) {
  80.                 DFS_Visit(i, disc, proc, idx);
  81.             }
  82.         }
  83.         proc[idx[1]++] = id;
  84.     }
  85.    
  86.     public void reset() {
  87.         for (Vertex v : list) v.reset();
  88.     }
  89. }
  90.  
  91. class Vertex {
  92.  
  93.     boolean visited;
  94.  
  95.     public void visit() {
  96.         visited = true;
  97.     }
  98.  
  99.     public void reset() {
  100.         visited = false;
  101.     }
  102.  
  103.     public String toString() {
  104.         return String.valueOf(visited);
  105.     }
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement