public void runAlgDist() {

		int numN = numNodes;
		VertexPulse vi;
		int di;
		int ti;
		int lowIterator = 0;
		boolean empty;
		while (Snum < numN) {
			while (lowIterator < Delta) {
				
				vi = lowLevelBuckets[lowIterator].getEntrance();
				di = vi.getMinDist();
				ti = vi.getMaxTime();
				empty = deleteToLabel(lowIterator);
				Snum++;

				EdgePulse e = vi.getReversedEdges();
				int dj;
				VertexPulse vj;
				while (e != null) {
					
					vj = e.getTarget();
					dj = vj.getMinDist();
					if (dj > di + e.getWeightDist()) {
						int ndj = di + e.getWeightDist();
						// dMap.put(vj.getID(), ndj);
						vj.setMinDist(ndj);
						vj.setMaxTime(ti + e.getWeightTime());
						if (ndj < dK) {
							if (vj.isInserteDist()) {
								moveToLow(dj, ndj, vj);
							} else {
								vj.setInsertedDist();
								insertLow(ndj, vj);
							}
						} else {
							if (vj.isInserteDist()) {
								moveBucketToBucket(dj, ndj, vj);
							} else {
								vj.setInsertedDist();
								firstInsertion(ndj, vj);
							}
						}
					}
					e = e.getNext();
				}
				if(empty){
					lowIterator = moveInLow(lowIterator);
				}
			}
			stepForwardInDist();
			lowIterator = whereToStart();
		}
	}