WIP: DFS
This commit is contained in:
@@ -8,27 +8,47 @@ export default defineStore('useMapPathStore', {
|
||||
clickedPath: [],
|
||||
allMapData: AllMapData(),
|
||||
cytoscape: null,
|
||||
allPaths: [],
|
||||
startNode: null,
|
||||
}),
|
||||
actions: {
|
||||
setCytoscape(cytoscape) {
|
||||
this.cytoscape = cytoscape;
|
||||
},
|
||||
createAllPaths() {
|
||||
this.startNode = this.cytoscape.nodes().filter(function(elem) {
|
||||
return elem.data('label').toLocaleLowerCase() === 'start';
|
||||
});
|
||||
// Depth First Search from the starting node
|
||||
this.depthFirstSearchCreatePath(this.startNode, [this.startNode.id()]);
|
||||
this.allPaths.forEach(path => {
|
||||
console.log('path',path );
|
||||
});
|
||||
const { insights } = this.allMapData;
|
||||
for(let i = 0; i < INSIGHTS_FIELDS_AND_LABELS.length; i++) {
|
||||
const curButton = insights[INSIGHTS_FIELDS_AND_LABELS[i][0]];
|
||||
for(let listIndex = 0; listIndex < curButton.length; listIndex++) {
|
||||
for(let nodeIndex = 0; nodeIndex < curButton[listIndex].length; nodeIndex++){
|
||||
if(nodeIndex === 0) {
|
||||
const startNodes = this.cytoscape.nodes().filter(function(elem) {
|
||||
return elem.data('label').toLocaleLowerCase() === 'start';
|
||||
// highlight between start node and first node
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
depthFirstSearchCreatePath(node, currentPath){
|
||||
const outgoingEdges = node.outgoers('edge');
|
||||
if (outgoingEdges.length === 0) {
|
||||
this.allPaths.push([...currentPath]);
|
||||
} else {
|
||||
outgoingEdges.targets().forEach((targetNode) => {
|
||||
if (!currentPath.includes(targetNode.id())) {
|
||||
// 避免loop,只有當目標節點不在當前路徑中之時才繼續
|
||||
this.depthFirstSearchCreatePath(targetNode, [...currentPath, targetNode.id()]);
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user