上色问题
/**
* *******************************
* Unit test for depthFirstTraversal.
* *******************************
*/
public static void depthFirstTraversalTest() {
//Test an undirected graph.
int[][] tempMatrix = {{0, 1, 1, 0}, {1, 0, 0, 1}, {1, 0, 0, 0}, {0, 1, 0, 0}};
Graph tempGraph = new Graph(tempMatrix);
System.out.println(tempGraph);
String tempSequence = "";
try {
tempSequence = tempGraph.depthFirstTraversal(0);
} catch (Exception ee) {
System.out.println(ee);
}//Of try
System.out.println("The depth first order of visit: " + tempSequence);
}//Of depthFirstTraversalTest
/**
* *******************************
* Coloring. Output all possible schemes.
*
* @param paraNumColors The number of colors.
* *******************************
*/
public void coloring(int paraNumColors) {
//Step 1.Initialized.
int tempNumNodes = connectivityMatrix.getRows();
int[] tempColorScheme = new int[tempNumNodes];
Arrays.fill(tempColorScheme, -1);
coloring(paraNumColors, 0, tempColorScheme);
}//Of coloring
/**
* *******************************
* Coloring. Output all possible approaches.
*
* @param paraNumColors The number of colors.
* @return The sequence of the visit.
* *******************************
*/
public void coloring(int paraNumColors, int paraCurrentNumNodes, int[] paraCurrentColoring) {
//Step 1. Initialize.
int tempNumNodes = connectivityMatrix.getRows();
System.out.println("coloring paraNumColors = " + paraNumColors +
", paraCurrentNumNodes = " + paraCurrentNumNodes + ", paraCurrentColoring " + Arrays.toString(paraCurrentColoring));
//A complete scheme.
if (paraCurrentNumNodes >= tempNumNodes) {
System.out.println("Find one: " + Arrays.toString(paraCurrentColoring));
return;
}//Of if
//Try all possible colors.
for (int i = 0; i < paraNumColors; i++) {
paraCurrentColoring[paraCurrentNumNodes] = i;
if (!colorConflict(paraCurrentNumNodes + 1, paraCurrentColoring)) {
coloring(paraNumColors, paraCurrentNumNodes + 1, paraCurrentColoring);
}//Of if
}//Of for i
}//Of coloring
/**
* *******************************
* Coloring conflict or not. Only compare the current last node with previous
* ones.
*
* @param paraCurrentNumNodes The current number of nodes.
* @param paraColoring The current coloring scheme
* @return Conflict or not.
* *******************************
*/
public boolean colorConflict(int paraCurrentNumNodes, int[] paraColoring) {
for (int i = 0; i < paraCurrentNumNodes - 1; i++) {
//No direct connection
if (connectivityMatrix.getValue(paraCurrentNumNodes - 1, i) == 0) {
continue;
}//Of if
if (paraColoring[paraCurrentNumNodes - 1] == paraColoring[i]) {
return true;
}//Of if
}//Of for i
return false;
}//Of colorConflict
/**
* *******************************
* Coloring test.
* *******************************
*/
public static void coloringTest() {
int[][] tempMatrix = {{0, 1, 1, 0}, {1, 0, 0, 1}, {1, 0, 0, 0}, {0, 1, 0, 0}};
Graph tempGraph = new Graph(tempMatrix);
tempGraph.coloring(3);
}//Of coloringTest
/**
* *******************************
* The entrance of the program.
*
* @param args Not used now.
* *******************************
*/
public static void main(String[] args) {
Graph tempGraph = new Graph(3);
System.out.println(tempGraph);
//Unit test.
getConnectivityTest();
breadthFirstTraversalTest();
depthFirstTraversalTest();
coloringTest();
}//Of main
问题:
为什么有的地方需要多次new?如27行