int tempValue;
int[] tempInDegree = new int[numNodes];
for (int i = 0; i < numNodes; i++) {
for (int j = 0; j < tempInDegree.length; j++) {
if (weightMatrix.getData()[i][j] != -1) {
tempInDegree[j]++;
} // Of if
} // Of for j
} // Of for i
System.out.println("In-degree of nodes: " + Arrays.toString(tempInDegree));
int[] tempEarlistArray = new int[numNodes];
for (int i = 0; i < numNodes; i++) {
if (tempInDegree[i] > 0) {
continue;
} // Of if
System.out.println("Removing " + i);
for (int j = 0; j < numNodes; j++) {
if (weightMatrix.getData()[i][j] != -1) {
tempInDegree[j]--;
tempValue = tempEarlistArray[i] + weightMatrix.getData()[i][j];
if (tempValue > tempEarlistArray[j]) {
tempEarlistArray[j] = tempValue;
} // Of if
} // Of if
} // Of for j
} // Of for i
System.out.println("Earlest start time: " + Arrays.toString(tempEarlistArray));
int[] tempOutDegree = new int[numNodes];
for (int i = 0; i < numNodes; i++) {
for (int j = 0; j < numNodes; j++) {
if (weightMatrix.getData()[i][j] != -1) {
tempOutDegree[i]++;
} // Of if
} // Of for j
} // Of for i
System.out.println("Out-degree of nodes: " + Arrays.toString(tempOutDegree));
int[] tempLatestArray = new int[numNodes];
for (int i = 0; i < numNodes; i++) {
tempLatestArray[i] = tempEarlistArray[numNodes - 1];
} // of for i
for (int i = numNodes - 1; i >= 0; i--) {
if (tempOutDegree[i] > 0) {
continue;
} // Of if
System.out.println("Removing " + i);
for (int j = 0; j < numNodes; j++) {
if (weightMatrix.getData()[j][i] != -1) {
tempOutDegree[j]--;
tempValue = tempLatestArray[i] - weightMatrix.getData()[j][i];
if (tempValue < tempLatestArray[j]) {
tempLatestArray[j] = tempValue;
} // Of if
System.out.println("The out-degree of " + j + " decreases by 1.");
} // Of if
} // Of for j
} // Of for i
System.out.println("Latest start time: " + Arrays.toString(tempLatestArray));
boolean[] tempVisteArray = new boolean[numNodes];
for (int i = 0; i < numNodes; i++) {
if (tempEarlistArray[i] == tempLatestArray[i]) {
tempVisteArray[i] = true;
} // Of if
} // Of for i
System.out.println("Critical array: " + Arrays.toString(tempVisteArray));
System.out.print("Critical nodes: ");
for (int i = 0; i < numNodes; i++) {
if (tempVisteArray[i]) {
System.out.print(" " + i);
} // Of if
} // Of for i
System.out.println();
return tempVisteArray;
注意改变的入度出度。