ฉันกำลังพยายามเพิ่มวัตถุที่สร้างขึ้นใหม่ลงในตารางและกราฟ โดยเฉพาะวิธีการเพิ่มโหนดลงในกราฟอย่างมีประสิทธิภาพด้วย for loop ตารางเหล่านี้ได้รับการตั้งค่าเป็นอาร์เรย์คู่เพื่ออัปเดตมุมมองเริ่มต้น (ตารางวัตถุเป็นแบบจำลองและอัปเดตมุมมองผ่านการพุช) ฉันยังตั้งค่า HashMap โดยใช้รายการใน i และ j ภายใน for loops เพื่อกำหนดคีย์ของวัตถุ อย่างไรก็ตาม เพื่อตั้งค่ากราฟเพื่อคำนวณเส้นทางที่สั้นที่สุดจากโหนดหนึ่งไปอีกโหนดหนึ่งในภายหลัง ฉันจำเป็นต้องเพิ่มโหนดเหล่านี้ลงในกราฟ ฉันต้องการใช้อัลกอริทึมของ Djikstra เพื่อคำนวณเส้นทางที่สั้นที่สุด ฉันสามารถสร้างคำสั่งแบบมีเงื่อนไขเพื่อกำหนดว่าโหนดมุมและโหนดขอบคืออะไรในตารางและกำหนดว่ารายการใดที่จะมีขอบแบบสองทิศทาง แต่ดูเหมือนว่าจะเป็น 'การตัดยาว' มีวิธีใดในการเพิ่มโหนดลงในกราฟด้วยขนาดเมทริกซ์ที่กำหนดไว้ล่วงหน้า เช่น 20 X 20 ซึ่งคล้ายกับอาร์เรย์คู่หรือไม่
ด้านล่างนี้เป็นโค้ดตัวสร้างเกี่ยวกับวิธีที่ฉันสร้างสองรายการแรก (การสร้างอาร์เรย์คู่และ 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);
}
}
}
}