Advertisement
FNSY

Untitled

Apr 12th, 2017
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.92 KB | None | 0 0
  1. package signalFlowGraph;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Arrays;
  5. import java.util.Scanner;
  6.  
  7. public class AnalyzeSFG {
  8.  
  9. private int[][] adjMatrix;
  10. private int numberOfNodes;
  11. private String path = new String();
  12. private int forwardPathGain = 1;
  13. private ArrayList<String> forwardPath = new ArrayList<>();
  14. private ArrayList<Integer> forwardGains = new ArrayList<>();
  15.  
  16. public static void main(String[] args) {
  17. AnalyzeSFG g = new AnalyzeSFG();
  18. g.inputs();
  19. g.printMatrix();
  20. g.traverseForwardPath(0);
  21. g.print();
  22. }
  23.  
  24. private void inputs() {
  25. Scanner scan = new Scanner(System.in);
  26. System.out.print("Enter The Number Of Nodes : ");
  27. numberOfNodes = scan.nextInt();
  28. adjMatrix = new int[numberOfNodes][numberOfNodes];
  29. for (int i = 0; i < this.numberOfNodes; i++)
  30. Arrays.fill(adjMatrix[i], 0);
  31. System.out.println("To Get Out From Entering Signal Flow Graph Representation");
  32. System.out.println("Put From = 0 ");
  33. while (true) {
  34. int from, to, gain;
  35. System.out.print("From : ");
  36. from = scan.nextInt() - 1;
  37. if (from < 0) {
  38. break;
  39. }
  40. System.out.print("To : ");
  41. to = scan.nextInt() - 1;
  42. System.out.print("gain : ");
  43. gain = scan.nextInt();
  44. adjMatrix[to][from] = gain;
  45. }
  46. }
  47.  
  48. private void printMatrix() {
  49. for (int i = 0; i < numberOfNodes; i++) {
  50. for (int j = 0; j < numberOfNodes; j++) {
  51. System.out.print(adjMatrix[i][j] + " ");
  52. }
  53. System.out.println();
  54. }
  55.  
  56. }
  57.  
  58. private void print() {
  59. for (int i = 0; i < this.forwardGains.size(); i++) {
  60. System.out.println(this.forwardGains.get(i));
  61. System.out.println(this.forwardPath.get(i));
  62. }
  63. }
  64.  
  65. private void traverseForwardPath(int columnIndex) {
  66.  
  67. if (isLastNode(columnIndex)) {
  68. addToForwardPath(columnIndex, 1);
  69. forwardPath.add(path);
  70. forwardGains.add(forwardPathGain);
  71. return;
  72. }
  73.  
  74. int rowIndex = -1;
  75. // for (int columnIndex = nextNodeInThePath; columnIndex <
  76. // numberOfNodes; columnIndex++) {
  77. rowIndex = getNextNode(rowIndex + 1, columnIndex);
  78. addToForwardPath(columnIndex, adjMatrix[rowIndex][columnIndex]);
  79. traverseForwardPath(rowIndex);
  80. removeFromForwardPath(columnIndex, adjMatrix[rowIndex][columnIndex]);
  81. // }
  82. }
  83.  
  84. private void removeFromForwardPath(int currentNode, int gain) {
  85. String toBeRemoved = "x" + currentNode;
  86. if (path.contains(toBeRemoved))
  87. path = path.replace(toBeRemoved, "");
  88. forwardPathGain /= gain;
  89.  
  90. }
  91.  
  92. private void addToForwardPath(int currentNode, int gain) {
  93. path += "x" + currentNode;
  94. forwardPathGain *= gain;
  95. }
  96.  
  97. private int getNextNode(int rowIndex, int columnIndex) {
  98. for (; rowIndex < this.numberOfNodes; rowIndex++)
  99. if (adjMatrix[rowIndex][columnIndex] != 0)
  100. return rowIndex;
  101. return -1;
  102. }
  103.  
  104. private boolean isLastNode(int columnIndex) {
  105. for (int i = 0; i < this.numberOfNodes; i++)
  106. if (adjMatrix[i][columnIndex] != 0)
  107. return false;
  108. return true;
  109. }
  110.  
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement