Advertisement
Vladislav8653

Untitled

Aug 7th, 2023
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.99 KB | None | 0 0
  1. import java.io.File;
  2. import java.util.Scanner;
  3.  
  4. public class Graph {
  5.     private static final Scanner scanner = new Scanner(System.in);
  6.     static Scanner fileScanner;
  7.     public static void main(String[] args) {
  8.         int num;
  9.         byte[][] arr;
  10.         System.out.println("124768utyuruyb5y3t34tq35yv54yq45yvq54yq45yq54yvq45yq 5y.");
  11.         System.out.println("Enter type of input." + '\n' + "1 is console input, 0 is file input.");
  12.         boolean chose = choose();
  13.         if (chose) {
  14.             System.out.println("Input size of matrix:");
  15.             num = inputMatrixSize();
  16.             System.out.println("Input matrix elements:");
  17.             arr = inputMatrix(num);
  18.         } else {
  19.             String path = inputFilePath();
  20.             num = inputSizeOfMatrixFromFile(path);
  21.             arr = inputMatrixFile(path, num);
  22.         }
  23.         System.out.println("Input start vertex:");
  24.         int vertex = inputVertex(num);
  25.         System.out.println(BFSGraph(arr,num,vertex));
  26.     }
  27.  
  28.     private static String BFSGraph(byte[][] matrix, int n, int start) {
  29.         boolean[] boolArr = new boolean[n];
  30.         String output = "BFS: ";
  31.         for (int i = 0; i < n; i++) {
  32.             boolArr[i] = false;
  33.         }
  34.         HMQueue.enqueue(start - 1);
  35.         boolArr[start - 1] = true;
  36.         while (!HMQueue.isEmpty()) {
  37.             output = output + (HMQueue.peek() + 1) + " ";
  38.             for (int i = 0; i < n; i++) {
  39.                 if ((!boolArr[i]) && (matrix[HMQueue.peek()][i] == 1)) {
  40.                     HMQueue.enqueue(i);
  41.                     boolArr[i] = true;
  42.                 }
  43.             }
  44.             HMQueue.dequeue();
  45.         }
  46.         return output;
  47.     }
  48.  
  49.  
  50.     private static boolean choose() {
  51.         int inputNumber = 0;
  52.         boolean isIncorrect;
  53.         final int MIN_NUM = 0;
  54.         final int MAX_NUM = 1;
  55.         do {
  56.             isIncorrect = false;
  57.             try {
  58.                 inputNumber = Integer.parseInt(scanner.nextLine());
  59.             } catch (Exception e) {
  60.                 isIncorrect = true;
  61.                 System.out.println("Please, enter a number.");
  62.             }
  63.             if (!isIncorrect && (inputNumber < MIN_NUM || inputNumber > MAX_NUM)) {
  64.                 System.out.println("You are out of input range!");
  65.                 isIncorrect = true;
  66.             }
  67.         } while (isIncorrect);
  68.         return inputNumber == 1;
  69.     }
  70.  
  71.     private static int inputData() {
  72.         int n = 0;
  73.         boolean isIncorrect;
  74.         do {
  75.             isIncorrect = false;
  76.             try {
  77.                 n = Integer.parseInt(scanner.nextLine());
  78.             } catch (Exception e) {
  79.                 isIncorrect = true;
  80.                 System.out.println("Please, enter a integer number:");
  81.             }
  82.         } while (isIncorrect);
  83.         return n;
  84.     }
  85.     private static int inputMatrixElement() {
  86.         boolean isIncorrect;
  87.         int n;
  88.         do {
  89.             n = inputData();
  90.             isIncorrect = false;
  91.             if ( (n != 0) && (n != 1)) {
  92.                 isIncorrect = true;
  93.                 System.out.println("Only 1 or 0 are valid.");
  94.             }
  95.         } while (isIncorrect);
  96.         return n;
  97.     }
  98.  
  99.     private static int inputMatrixSize() {
  100.         boolean isIncorrect;
  101.         final int MIN_SIZE = 1;
  102.         final int MAX_SIZE = 10;
  103.         int num;
  104.         do {
  105.             num = inputData();
  106.             isIncorrect = false;
  107.             if ((num < MIN_SIZE) || (num > MAX_SIZE)) {
  108.                 System.out.println("Matrix size should be in the range from 1 to 10:");
  109.                 isIncorrect = true;
  110.             }
  111.         } while (isIncorrect);
  112.         return num;
  113.     }
  114.  
  115.     private static int inputVertex(final int MAX_SIZE) {
  116.         boolean isIncorrect;
  117.         final int MIN_SIZE = 1;
  118.         int num;
  119.         do {
  120.             num = inputData();
  121.             isIncorrect = false;
  122.             if ((num < MIN_SIZE) || (num > MAX_SIZE)) {
  123.                 System.out.println("Start vertex should exist at least, bro.");
  124.                 isIncorrect = true;
  125.             }
  126.         } while (isIncorrect);
  127.         return num;
  128.     }
  129.  
  130.     private static byte[][] inputMatrix(int num) {
  131.         byte[][] arr = new byte[num][num];
  132.         for (int i = 0; i < arr.length; i++)
  133.             for (int j = 0; j < arr.length; j++)
  134.                 arr[i][j] = (byte) inputMatrixElement();
  135.         if (!checkMatrix(arr)){
  136.             System.out.println("bro, input correct matrix");
  137.             inputMatrix(num);
  138.         }
  139.         return arr;
  140.     }
  141.     private static boolean checkMatrix(byte[][] matrix) {
  142.         for (int i = 0; i < matrix.length; i++) {
  143.             for (int j = 0; j < matrix.length; j++) {
  144.                 if (matrix[i][j] != matrix[j][i]) return false;
  145.             }
  146.         }
  147.         return true;
  148.     }
  149.  
  150.     private static String inputFilePath() {
  151.         String path;
  152.         boolean isIncorrect;
  153.         do {
  154.             isIncorrect = false;
  155.             System.out.println("Input file path:");
  156.             path = scanner.nextLine();
  157.             File file = new File(path);
  158.             if (!file.exists()) {
  159.                 System.out.println("Wrong way to file.");
  160.                 isIncorrect = true;
  161.             }
  162.             if (!file.canRead() && file.exists()) {
  163.                 System.out.println("Impossible to read a file.");
  164.                 isIncorrect = true;
  165.             }
  166.             if (!file.canWrite() && file.canRead()) {
  167.                 System.out.println("Impossible to write a file.");
  168.                 isIncorrect = true;
  169.             }
  170.         } while (isIncorrect);
  171.         return path;
  172.     }
  173.     private static int inputSizeOfMatrixFromFile(String path) {
  174.         int num = 0;
  175.         boolean isIncorrect;
  176.         final int MIN = 1;
  177.         final int MAX = 10;
  178.         do {
  179.             isIncorrect = false;
  180.             try {
  181.                 fileScanner = new Scanner(new File(path));
  182.                 num = fileScanner.nextInt();
  183.             } catch (Exception q) {
  184.                 isIncorrect = true;
  185.                 System.out.println("Check file.");
  186.                 path = inputFilePath();
  187.             }
  188.             if (!isIncorrect && ((num < MIN) || (num > MAX))) {
  189.                 isIncorrect = true;
  190.                 System.out.println("Array size should be in the range from 1 to 10:");
  191.                 path = inputFilePath();
  192.             }
  193.         } while (isIncorrect);
  194.         return num;
  195.     }
  196.     private static boolean checkBinary (int n) {
  197.         return (n == 1) || (n == 0);
  198.     }
  199.  
  200.     private static byte[][] inputMatrixFile(String path, int num) {
  201.         boolean isIncorrect;
  202.         byte[][] arr = new byte[num][num];
  203.         int n;
  204.         do {
  205.             isIncorrect = false;
  206.             try {
  207.                 fileScanner = new Scanner(new File(path));
  208.                 fileScanner.nextLine();
  209.                 for (int i = 0; (i < arr.length); i++) {
  210.                     for (int j = 0; j < arr.length; j++) {
  211.                         n = fileScanner.nextInt();
  212.                         if (checkBinary(n)) {
  213.                             arr[i][j] = (byte) n;
  214.                         } else {
  215.                             isIncorrect = true;
  216.                             System.out.println("Matrix should consist of ones and zeros only!");
  217.                             path = inputFilePath();
  218.                         }
  219.                     }
  220.                 }
  221.                 if (!checkMatrix(arr)){
  222.                     System.out.println("bro, input correct matrix");
  223.                     isIncorrect = true;
  224.                     path = inputFilePath();
  225.                 }
  226.             } catch (Exception q) {
  227.                 isIncorrect = true;
  228.                 System.out.println("Reading of array elements failed.");
  229.                 path = inputFilePath();
  230.             }
  231.         } while (isIncorrect);
  232.         return arr;
  233.     }
  234. }
  235. ----------------------------------------------------------------
  236. class QueueNode {
  237.     int data;
  238.     QueueNode next;
  239.     public QueueNode(int data) {
  240.         this.data = data;
  241.         this.next = null;
  242.     }
  243. }
  244. ----------------------------------------------------------------
  245. class HMQueue {
  246.     private static QueueNode tail = null, head = null;
  247.  
  248.     public static int dequeue() {
  249.         if (head == null) {
  250.             return -1;
  251.         }
  252.         QueueNode temp = head;
  253.         head = head.next;
  254.         if (head == null) {
  255.             tail = null;
  256.         }
  257.         return temp.data;
  258.     }
  259.  
  260.     public static void enqueue(int item) {
  261.         QueueNode node = new QueueNode(item);
  262.         if (head == null) {
  263.             head = node;
  264.         }
  265.         else {
  266.             tail.next = node;
  267.         }
  268.         tail = node;
  269.     }
  270.  
  271.     public static int peek() {
  272.         if (head == null) {
  273.             return -1;
  274.         }
  275.         return head.data;
  276.     }
  277.  
  278.     public static boolean isEmpty() {
  279.         return tail == null && head == null;
  280.     }
  281.  
  282. }
  283.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement