'
1157 | if (percorso[choice].length == 1)
1158 | {
1159 | nodes.forEach(function(node)
1160 | {
1161 | if (node.id == start)
1162 | {
1163 | risultato += '
'
1164 | risultato += node.label;
1165 | risultato += '
'
1166 | }
1167 | })
1168 | nodes.forEach(function(node)
1169 | {
1170 | if (node.id == end)
1171 | {
1172 | risultato += '
'
1173 | risultato += node.label;
1174 | risultato += '
'
1175 | }
1176 | })
1177 | }
1178 | else
1179 | {
1180 | for (let i = percorso[choice].length; i >= 0; i--)
1181 | {
1182 | nodes.forEach(function(node)
1183 | {
1184 | if (node.id == percorso[choice][i])
1185 | {
1186 | risultato += '
'
1187 | risultato += node.label;
1188 | risultato += '
'
1189 | }
1190 | });
1191 | }
1192 | }
1193 | risultato += '
'
1194 | risultato += ''
1195 | let spesa = 0;
1196 | let width = 40
1197 | for (let i = percorso[choice].length - 1; i >= 0; i--)
1198 | {
1199 | if (percorso[choice].length == 1) width = 80;
1200 | risultato += '
'
1201 | if (percorso[choice].length == 1) risultato += INFINITY
1202 | else risultato += spesa;
1203 | spesa += nodiCollegati[percorso[choice][i]][percorso[choice][i - 1]]
1204 | risultato += '
'
1205 | }
1206 | risultato += '
'
1207 | risultatoTot += risultato;
1208 | var table = ' "
1261 | risultatoTre += '
'
1262 | let border = " border-light border-5 border-end"
1263 | for (let i = percorsi - 1; i >= 0; i--)
1264 | {
1265 | if (i == 0) border = "";
1266 | if (i == choice) risultatoTre += '
'
1267 | else risultatoTre += '
'
1268 | }
1269 | risultatoTre += '
'
1270 | risultatoTre += '
'
1271 | }
1272 | risultatoTot += risultatoTre
1273 | return risultatoTot;
1274 | }
1275 | let scelta = 0;
1276 |
1277 | function changeChoice(newChoice)
1278 | {
1279 |
1280 | choice = newChoice;
1281 |
1282 | let appNodes = nodes;
1283 | let appEdges = edges;
1284 | if(flagNodes == true){
1285 | nodes = JSON.parse(NodesApp);
1286 | }
1287 | if(flagEdges == true){
1288 | edges = JSON.parse(EdgesApp)
1289 |
1290 | }
1291 |
1292 | document.getElementById("output").innerHTML = risultato();
1293 | if(flagNodes == true){
1294 |
1295 | nodes = appNodes;
1296 | }
1297 | if(flagEdges == true){
1298 |
1299 | edges = appEdges;
1300 | }
1301 | }
1302 |
1303 | function ritornaEdge(idNodoA, idNodoB)
1304 | {
1305 | let flag = false;
1306 | edges.forEach(function(edge)
1307 | {
1308 | if (((edge.arrows.to == true || (edge.arrows.to == false && edge.arrows.from == false)) && edge.from == idNodoA && edge.to == idNodoB) || ((edge.arrows.from == true || (edge.arrows.to == false && edge.arrows.from == false)) && edge.from == idNodoB && edge.to == idNodoA)) flag = true;
1309 | })
1310 | return flag;
1311 | }
1312 | var costoPercorso = 0;
1313 | let cost = [];
1314 | let app = [];
1315 | let prec = [];
1316 | let tab = [];
1317 | let percorsi = 0;
1318 |
1319 | function Dijkstra()
1320 | {
1321 | cost = [];
1322 | app = [];
1323 | prec = [];
1324 | tab = [];
1325 | var flag = false;
1326 | do {
1327 | if (tuttiEsplorati() == true) flag = true;
1328 | else
1329 | {
1330 | var idNodoA = ricercaCostoMinoreTraNonEsplorati();
1331 | tabellaAppoggio[idNodoA].used = true;
1332 | for (let idNodoB in nodiCollegati[idNodoA])
1333 | {
1334 | if (nodiCollegati[idNodoA][idNodoB] + tabellaAppoggio[idNodoA].cost < tabellaAppoggio[idNodoB].cost)
1335 | {
1336 | tabellaAppoggio[idNodoB].cost = nodiCollegati[idNodoA][idNodoB] + tabellaAppoggio[idNodoA].cost;
1337 | tabellaAppoggio[idNodoB].prec = idNodoA;
1338 | }
1339 | else if (nodiCollegati[idNodoA][idNodoB] + tabellaAppoggio[idNodoA].cost == tabellaAppoggio[idNodoB].cost)
1340 | {
1341 | cost.push(nodiCollegati[idNodoA][idNodoB] + tabellaAppoggio[idNodoA].cost)
1342 | prec.push(idNodoA)
1343 | app.push(idNodoB)
1344 | }
1345 | }
1346 | }
1347 | } while (flag == false);
1348 | tab[app.length] = {}
1349 | nodes.forEach(function(node)
1350 | {
1351 | tab[app.length][node.id] = {
1352 | cost: tabellaAppoggio[node.id].cost,
1353 | prec: tabellaAppoggio[node.id].prec,
1354 | used: tabellaAppoggio[node.id].used
1355 | }
1356 | })
1357 | percorsi = app.length + 1;
1358 | for (let i = 0; i < app.length; i++)
1359 | {
1360 | tab[i] = {}
1361 | nodes.forEach(function(node)
1362 | {
1363 | if (node.id == app[i])
1364 | {
1365 | tab[i][node.id] = {
1366 | cost: cost[i],
1367 | prec: prec[i],
1368 | used: true
1369 | }
1370 | }
1371 | else
1372 | {
1373 | tab[i][node.id] = {
1374 | cost: tabellaAppoggio[node.id].cost,
1375 | prec: tabellaAppoggio[node.id].prec,
1376 | used: tabellaAppoggio[node.id].used
1377 | }
1378 | }
1379 | })
1380 | }
1381 | initPercorso(percorsi - 1);
1382 | }
1383 |
1384 | function initPercorso()
1385 | {
1386 | var flag = false;
1387 | var idNodo = end;
1388 | percorso = [];
1389 | for (let i = 0; i < percorsi; i++)
1390 | {
1391 | percorso[i] = []
1392 | costoPercorso = 0;
1393 | flag = false;
1394 | idNodo = end;
1395 | do {
1396 | percorso[i].push(idNodo)
1397 | edges.forEach(function(edge)
1398 | {
1399 | if (((edge.from == idNodo && edge.to == tab[i][idNodo].prec && (edge.arrows.from == true || (edge.arrows.to == false && edge.arrows.from == false))) || (edge.to == idNodo && edge.from == tab[i][idNodo].prec && (edge.arrows.to == true || (edge.arrows.to == false && edge.arrows.from == false)))))
1400 | {
1401 | edge.label = edge.label.trim();
1402 | edge.label = Number(edge.label);
1403 | costoPercorso += edge.label;
1404 | }
1405 | })
1406 | idNodo = tab[i][idNodo].prec
1407 | if (idNodo == null) flag = true
1408 | } while (flag == false);
1409 | }
1410 | if (costoPercorso == 0)
1411 | {
1412 | tab.splice(0, percorsi - 1)
1413 | percorso.splice(0, percorso.length - 1)
1414 | tab[0] = {}
1415 | nodes.forEach(function(node)
1416 | {
1417 | tab[0][node.id] = {
1418 | cost: tabellaAppoggio[node.id].cost,
1419 | prec: tabellaAppoggio[node.id].prec,
1420 | used: tabellaAppoggio[node.id].used
1421 | }
1422 | })
1423 | percorsi = 1;
1424 | }
1425 | }
1426 |
1427 | function tuttiEsplorati()
1428 | {
1429 | var visitati = 0;
1430 | var nodi = Object.keys(tabellaAppoggio)
1431 | var numeroNodi = nodi.length
1432 | for (let key in tabellaAppoggio)
1433 | {
1434 | if (tabellaAppoggio[key].used == true) visitati++;
1435 | }
1436 | if (visitati == numeroNodi) return true;
1437 | return false;
1438 | }
1439 |
1440 | function ricercaCostoMinoreTraNonEsplorati()
1441 | {
1442 | var min = Infinity;
1443 | var keyMin = null; //se tutti esplorati
1444 | for (let key in tabellaAppoggio)
1445 | {
1446 | if (tabellaAppoggio[key].used == false && tabellaAppoggio[key].cost <= min)
1447 | {
1448 | min = tabellaAppoggio[key].cost;
1449 | keyMin = key
1450 | }
1451 | }
1452 | return keyMin;
1453 | }
1454 | var tabellaAppoggio = {};
1455 | var nodiCollegati = {}
1456 | var spesa = 0;
1457 | var start = null;
1458 | var end = null;
1459 | var percorso = [];
1460 | let fJson = [];
1461 | let EdgesApp;
1462 | let NodesApp;
1463 | function resetta(){
1464 | if(flagNodes == false && flagEdges == false){
1465 | flagEdges = true;
1466 | flagNodes = true;
1467 | EdgesApp = Edges;
1468 | NodesApp = Nodes;
1469 | }
1470 | var currentNodes = nodes.get({returnType:"Object"});
1471 | var currentEdges = edges.get({returnType:"Object"});
1472 | nodes.forEach(function(node){
1473 | edges.forEach(function(edge)
1474 | {
1475 | if (edge.from == node.id || edge.to == node.id)
1476 | {
1477 | edges.remove(
1478 | {
1479 | id: edge.id
1480 | })
1481 | }
1482 | });
1483 | nodes.remove(
1484 | {
1485 | id: node.id
1486 | })
1487 | })
1488 |
1489 | for (let i = 65; i <= 90; i++)
1490 | {
1491 | labels[String.fromCharCode(i)] = {
1492 | used: false
1493 | };
1494 | }
1495 |
1496 | Nodes = NodesApp;
1497 | Edges = EdgesApp
1498 |
1499 |
1500 | nodes.update(currentNodes);
1501 | edges.update(currentEdges);
1502 | nodes.forEach(function(node){
1503 | nodes.remove(
1504 | {
1505 | id: node.id
1506 | })
1507 | })
1508 | edges.forEach(function(edge){
1509 | edges.remove(
1510 | {
1511 | id: edge.id
1512 | })
1513 | })
1514 |
1515 | gestioneInputNodi()
1516 |
1517 | }
1518 | function aggiornaNetwork()
1519 | {
1520 |
1521 | if (data.length < 2)
1522 | {
1523 | const modalError = new bootstrap.Modal(document.getElementById("errore"));
1524 | textError = 'Please enter (nodes - edges).json';
1525 | document.getElementById("textError").innerHTML = textError;
1526 | let button = '