グラフにノードを追加および削除してから、BFS および DFS トラバーサルを実行できるプログラムを作成しようとしています。
だから私はもともと実行時add
にconnect
ノードを...次に、ユーザーがadd child to parent
ボタンを押して子を適切に追加できるようにしたいと考えています。
AddButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
Nodes nX = new Nodes("X", nodeX, nodeY, nodeWidth, nodeHeight);
appendNode(rootNode, nX);
}
});
}
X
新しいノードを追加しようとすると、現在の隣接行列が上書きされ、 の子として単一の新しいノードに置き換えられるようですA
。
私はそれがなぜそれをしているのか知っていると思います...私のappendNode()
関数は古いものを上書きし、新しいnodeListサイズで新しいものを作成することによって隣接行列を更新しようとするからです:
public void appendNode(Nodes parent, Nodes child) {
//add new node X to nodeList
addNode(child);
//loop through all nodes again to be connected, plus new one... then create new adjMatrix
System.out.println(nodeList.size());
size = nodeList.size();
adjMatrix = null;
adjMatrix = new int[size][size];
int fromNode = nodeList.indexOf(parent);
int toNode = nodeList.indexOf(child);
adjMatrix[fromNode][toNode] = 1;
adjMatrix[toNode][fromNode] = 0;
}
public void addNode(Nodes n) {
nodeList.add(n);
}
しかし、上書きせずに欲しいものを達成する他の方法はわかりません。
何かご意見は?
ありがとう!
参考までに、接続ノード メソッドは次のとおりです。
public void connectNode(Nodes from, Nodes to)
{
//if matrix is empty..
if(adjMatrix == null)
{
//set matrix [row][col] size to size of nodesList list
size = nodeList.size();
//set dimensions of adj matrix... (6x6 nodesList)
adjMatrix = new int[size][size];
}
int fromNode = nodeList.indexOf(from);
int toNode = nodeList.indexOf(to);
//connect node A to B and B to A, set that i,j position = 1
adjMatrix[fromNode][toNode] = 1;
adjMatrix[toNode][fromNode] = 0;
}
編集:
public void appendNode(Nodes parent, Nodes child) {
//add new node X to nodeList
addNode(child);
//loop through all nodes again to be connected, plus new one... then create new adjMatrix
int newSize = nodeList.size();
//make a new adj matrix of the new size...
int[][] adjMatrixCopy = new int[newSize][newSize];
int fromNode = nodeList.indexOf(parent);
int toNode = nodeList.indexOf(child);
adjMatrixCopy[fromNode][toNode] = 1;
adjMatrixCopy[toNode][fromNode] = 0;
//copy adjMatrix data to new matrix...
for (int i = 0; i < adjMatrix.length; i++) {
for (int j = 0; j < adjMatrix[i].length; j++) {
adjMatrixCopy[i][j] = adjMatrix[i][j];
}
}
//still need to add newly added node
//adjMatrix = null;
}