本章的內容為開發一個小專案,該小專案為在某虛擬村莊收送貨的程式
主要的程式碼在這裡
虛擬村莊的路線資料
起點-終點
const roads = [
"Alice's House-Bob's House", "Alice's House-Cabin",
"Alice's House-Post Office", "Bob's House-Town Hall",
"Daria's House-Ernie's House", "Daria's House-Town Hall",
"Ernie's House-Grete's House", "Grete's House-Farm",
"Grete's House-Shop", "Marketplace-Farm",
"Marketplace-Post Office", "Marketplace-Shop",
"Marketplace-Town Hall", "Shop-Town Hall"
];
轉換資料結構,有助於讓我們知道從自某地點出發,可以到達哪些地方
function buildGraph(edges){
// create graph from null to prevent unexpected inherit property
let graph = Object.create(null);
function addEdge(from , to){
if(graph[from] == null){
// 如果物件
graph[from] = [to];
}else{
graph[from].push(to);
}
}
/*
split roads into 2d array as '[[from , to], [from , to]..]'
then extract from/to locations from array
pass from/to location to helper function which generate graph
*/
for(let [from , to] of edges.map(value=> value.split("-"))){
/*
因為路線是雙向的
所以要反向執行 addEdge
*/
addEdge(from , to);
addEdge(to , from);
}
return graph;
}
這時候可以看見資料被整理如下方的格式
{
Alice's House: ["Bob's House", 'Cabin', 'Post Office'],
Bob's House: ["Alice's House", 'Town Hall'],
Cabin: ["Alice's House"],
Daria's House: ["Ernie's House", 'Town Hall'],
Ernie's House: ["Daria's House", "Grete's House"],
Farm: ["Grete's House", 'Marketplace'],
Grete's House: ["Ernie's House", 'Farm', 'Shop'],
Marketplace: ['Farm', 'Post Office', 'Shop', 'Town Hall'],
Post Office: ["Alice's House", 'Marketplace'],
Shop: ["Grete's House", 'Marketplace', 'Town Hall'],
Town Hall: ["Bob's House", "Daria's House", 'Marketplace', 'Shop']
}