// Graph Class Declaration class Graph { constructor() { this.AdjList = new Map(); this.vertexMap = new Map(); } addVertex(vertex) { if (this.AdjList.get(vertex) == undefined) { this.AdjList.set(vertex, []); this.vertexMap.set(vertex, vertexIndex); vertexIndex++; } } addEdge(v, w) { // Get the list for Vertex v and put the // Vertex w denoting Edge betweeen v and w this.AdjList.get(v).push(w); // Since graph is undirected, // add an edge from w to w also this.AdjList.get(w).push(v); } // Prints the Vertex and Adjacency List printGraph() { var get_keys = this.AdjList.keys(); for (var i of get_keys) { var get_values = this.AdjList.get(i); var conc = ""; for (var j of get_values) conc += j + " "; print(i + " -> " + conc); } } } // Global variable declarations var result; var k; var widthA = 1400; var length = 800; var scaleW = 0.01 * widthA / 2; var scaleH = 0.01 * length / 2; var temp = widthA / 10; var graph = new Graph(); var area = widthA * length; var maxIter = 100; var vertexIndex = 0; var cellSize = 20; function preload() { // var queryString = window.location.search; // var fileName = queryString.split('='); result = loadStrings('3980.edges'); } function setup() { var ind = result.length; for (var i = 0; i < ind; i++) { var splitString = split(result[i], ' '); graph.addVertex(splitString[0]); graph.addVertex(splitString[1]); graph.addEdge(splitString[0], splitString[1]); } // graph.printGraph(); var noOfVertices = graph.AdjList.size; var startX = 150; var startY = 80; if(noOfVertices > 400) { cellSize = 6; } var endX = startX + noOfVertices * cellSize; var endY = startY + noOfVertices * cellSize; createCanvas(endX + 100, endY + 50); // if(noOfVertices > 400) { // noLoop(); // } } function draw() { background(255); var noOfVertices = graph.AdjList.size; // print(noOfVertices); if(noOfVertices > 400) { cellSize = 6; } var startX = 150; var startY = 80; var endX = startX + (noOfVertices * cellSize); var endY = startY + (noOfVertices * cellSize); strokeWeight(1); var yLabels = graph.AdjList.keys(); for (var i of yLabels) { line(startX, startY, endX, startY); textSize(13); text(i, 120, startY + 15); startY += cellSize; } line(startX, startY, endX, startY); startX = 150; startY = 80; endX = startX + noOfVertices * cellSize; endY = startY + noOfVertices * cellSize; var xLabels = graph.AdjList.keys(); for (var i of xLabels) { line(startX, startY, startX, endY); push(); textSize(13); translate(startX + 5, 50); rotate(PI / 2); translate(-(startX + 5), -50); text(i, startX + 5, 50); pop(); startX += cellSize; } line(startX, startY, startX, endY); startX = 150; startY = 80; endX = startX + noOfVertices * cellSize; endY = startY + noOfVertices * cellSize; var vertexKeys = graph.AdjList.keys(); for (var vertex of vertexKeys) { var listOfConnectedVertices = graph.AdjList.get(vertex); for (var connectedVertex of listOfConnectedVertices) { var index = graph.vertexMap.get(connectedVertex); if (mouseX >= startX + ((index) * cellSize) && mouseX <= startX + ((index) * cellSize) + cellSize && mouseY >= startY && mouseY <= startY + cellSize) { fill(255, 0, 102); textSize(15); text(vertex + " , " + connectedVertex, mouseX + 20, mouseY - 13); } else { fill(51, 204, 204); } rect(startX + ((index) * cellSize), startY, cellSize, cellSize); fill(0,0,0); } startY += cellSize; } }