Saya mencoba menambahkan objek yang baru dibuat ke kisi dan grafik. Khususnya, cara menambahkan node ke grafik secara efisien dengan perulangan for. Kisi-kisinya telah diatur sebagai larik ganda, untuk memperbarui tampilan awal. (Kisi objek adalah model dan memperbarui tampilan melalui push). Saya juga menyiapkan HashMap menggunakan item di i dan j dalam loop for untuk menentukan kunci objek. Namun, untuk membuat grafik agar nantinya dapat menghitung jalur terpendek dari node ke node, saya perlu menambahkan node ini ke Grafik. Saya ingin menggunakan algoritma Djikstra untuk menghitung jalur terpendek. Saya dapat membuat pernyataan kondisional untuk mendefinisikan apa itu simpul sudut dan simpul tepi dalam kisi dan menentukan item apa yang memiliki tepi dua arah tetapi ini tampaknya merupakan 'jalan pintas'. Apakah ada cara untuk menambahkan node ke grafik dengan ukuran matriks yang telah ditentukan, seperti misalnya 20 X 20, mirip dengan array ganda?
Di bawah ini adalah kode konstruktor tentang cara saya membuat dua item pertama (membuat array ganda dan HashMap):
// **Constructor
// Construct a new Grid object. Sets up a HashMap of square object in order efficiently to get
// and add Square objects later.
public ObjectGrid(Integer width, Integer height)
{
// View
gui = new GUI(); // Instantiate GUI
boardView = new BoardView(width,height); // Instantiate BoardView
// Initialize Gui, set time and add simulation event listener to model (ObjectGrid)
gui.initGUI(BoardView);
gui.addSimulationEventListener(this);
// Initialize turnInSteps variable count to 0
turnInSteps = 0;
// Initialize numberOfDays variable count to 0
numberOfDays = 1;
// Instantiate HashMap
objectHashMap = new HashMap();
// Declare new object grid using double array of type objects.
// Size determined by parameter Integer values in constructor
myObjectGrid = new ObjectType[width][height];
// Instantiate Graph object
Graph graph = new ListGraph();
// For loop sets up the initial grid with ObejctType using a double array. After
// the completion of this loop, the grid will have XXX objects in the grid
// each with a reference to an object. Objects are also added
// to HashMap using coordinates as keys and square objects as values.
for(int i = 0; i < width; i++)
{
// Iterate through rows
for(int j = 0; j < height; j++)
{
// Iterate through columns
myObjectGrid[i][j] = new ObjectType(); // Instantiate a new Square at each row/column using default constructor
gridView.addObjectView(myObjectGrid[i][j].getObjectView(), i, j); // Add object view to each row/column placement
String hashMapKey = (i + ", " + j); // Use values from i and j as Key for objects HashMap
myObjectGrid[i][j].setID(hashMapKey); // Add ID's for each ObjectView to display in object using values from i and j
objectHashMap.add(hashMapKey, myObjectGrid[i][j]); // Add object to HashMap using string value of coordinates as key
listGraph.add(myObjectGrid[i][j]);
// Pseudo code
if (i != (width-height) && (j != height) etc)
{
listGraph.addBidirectionalEdge(mySquareGrid[i][j], (mySquareGrid[i][j+1]), 1);
listGraph.addBidirectionalEdge(mySquareGrid[i][j], (mySquareGrid[i+1][j]), 1);
listGraph.addBidirectionalEdge(mySquareGrid[i][j], (mySquareGrid[i+1][j+1]), 1);
}
}
}
}