logic-helper
Version:
This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
91 lines (88 loc) • 2.69 kB
JavaScript
import dijkstra from 'dijkstrajs';
export default class {
constructor(data) {
this.data = data;
this.graph = {};
const link = data.link;
const nodes = {}
const graph = {};
link.map((item) => {
let arr = item.split('>');
nodes[arr[0]] = 1;
graph[arr[0]] = graph[arr[0]] || {}
if (arr.length == 3) { //条件节点
graph[arr[0]][arr[2]] = 1;
nodes[arr[2]] = 1;
} else {
graph[arr[0]][arr[1]] = 1;
nodes[arr[1]] = 1;
}
})
this.validNodes = nodes;
this.graph = graph;
}
checkPath(start, end) {
//整体检查
let path = this.findPath(start, end);
if (!path.length) {
return '无法从: ' + start.split(':')[0] + ' 到达: ' + end.split(':')[0];
}
}
findPath(from, to) {
var find_path = dijkstra.find_path;
var path = []
try {
path = find_path(this.graph, from, to);
} catch (e) {
console.log(from, '>*>', to, '不存在')
}
return path
}
check() {
const data = this.data;
const node = data.node;
const link = data.link;
const sameNodes = new Set(); //同名点
let cacheBranch = {};
let nodeNameMap = {}
let linkToMap = {};
let linkFromMap = {};
let start, end;
link.map((item) => {
let arr = item.split('>');
if (arr.length == 3) { //条件节点
let id = `${arr[0]}>${arr[1]}`
linkToMap[arr[0]] = arr[2];
linkFromMap[arr[2]] = arr[0];
cacheBranch[id] = item;
} else {
linkToMap[arr[0]] = arr[1]
linkFromMap[arr[1]] = arr[0];
}
})
node.map((item) => {
let name = item.split(':')[0];
if (nodeNameMap[name]) {
sameNodes.add(nodeNameMap[name]);
sameNodes.add(item);
}
nodeNameMap[name] = item;
if (item.includes('Start')) {
start = item;
}
})
const res = {};
sameNodes.forEach((item) => {
if(item.indexOf('Start') > -1 || item.indexOf('End') > -1){
sameNodes.delete(item);
}
})
if (sameNodes.size) {
res['同名节点'] = [...sameNodes];
}
if (!start) {
res['起点'] = new Error('没有起点');
}
return Object.keys(res).length ? res : null;
}
}