Skip to content

Instantly share code, notes, and snippets.

@AlphaGit
Created April 20, 2014 21:19
Show Gist options
  • Save AlphaGit/11125541 to your computer and use it in GitHub Desktop.
Save AlphaGit/11125541 to your computer and use it in GitHub Desktop.
Sugiyama algorithm: minimizing crossings, naive approach
var minimizeCrossingsArisingFromColumnAndRows = function(grid, columnIndex, rowIndex1, rowIndex2) {
var originalNode1 = grid[columnIndex][rowIndex1];
var originalNode2 = grid[columnIndex][rowIndex2];
var nextColumn = grid[columnIndex + 1];
for (var nextNode1Index = 0; nextNode1Index < originalNode1.nextNodes.length; nextNode1Index++) {
var nextNode1 = originalNode1.nextNodes[nextNode1Index];
var nextNode1Row = nextColumn.indexOf(nextNode1);
for (var nextNode2Index = 0; nextNode2Index < originalNode2.nextNodes.length; nextNode2Index++) {
var nextNode2 = originalNode2.nextNodes[nextNode2Index];
var nextNode2Row = nextColumn.indexOf(nextNode2);
if (nextNode1Row > nextNode2Row) {
nextColumn.splice(nextNode1Row, 1, nextNode2);
nextColumn.splice(nextNode2Row, 1, nextNode1);
// switch variables too (no temporary variables)
nextNode1Row = nextNode2Row + (nextNode2Row = nextNode1Row, 0);
}
}
}
};
var minimizeCrossingsArisingFromColumn = function(grid, columnIndex) {
for (var rowIndex = 0; rowIndex < grid[columnIndex].length; rowIndex++) {
for (var secondNodeIndex = rowIndex + 1; secondNodeIndex < grid[columnIndex].length; secondNodeIndex++) {
minimizeCrossingsArisingFromColumnAndRows(grid, columnIndex, rowIndex, secondNodeIndex);
}
}
};
sugiyamaService.minimizeCrossings = function(grid) {
for (var columnIndex = 0; columnIndex < grid.length; columnIndex++) {
minimizeCrossingsArisingFromColumn(grid, columnIndex);
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment