public void calculateDijkstra(String usr, String cat) {
		int count = 1;
		int index = -1;
		int dis_u, dis_u_v;
		int w_u_v;
		// int strt = index;
		// int min_cat;
		int me;
		// Find in which position in the array is the starting user
		for (int i = 0; i < gr.g.size(); i++) {
			if (usr.equals(gr.g.get(i).name)) {
				index = i;
				// strt = index;
				break;
			}
		}
		if (index > -1) {
			// System.out.println("Max Integer = "+Integer.MIN_VALUE);

			// Arxikopoiisi algorithmou
			d.get(index).data2 = 0;
			v.set(index, true);
			// System.out.println("Arxikopoiimenos pinakas distance Dijkstra: ");
			// for (int i = 0; i < d.size(); i++) {
			// System.out.println(d.get(i).data1 + " " + d.get(i).data2);
			// }
			/*
			 * / --------- for (int i = 0; i < v.size(); i++) { if
			 * (d.get(i).data2 == Integer.MAX_VALUE - 1) { v.set(i, true);
			 * count++; } }
			 */
			while (count < gr.g.size()) {

				for (int j = 0; j < gr.g.get(index).edges.size(); j++) { // problem
					me = matchEdge(gr.g.get(index).edges.get(j).data1);
					// System.out.println("*************************");
					if (!v.get(me)) {
						if (d.get(index).data2 < Integer.MAX_VALUE - 1) {
							dis_u_v = d.get(me).data2;
							// System.out.println("Distance ("+me+","+index+")"+dis_u_v);
							dis_u = d.get(index).data2;
							// System.out.println(dis_u);
							w_u_v = gr.g.get(index).edges.get(j).data2;
							// System.out.println(w_u_v);
							if (dis_u_v > dis_u + w_u_v) {
								d.get(me).data2 = dis_u + w_u_v;
								// System.out.println("I am here. dis(u,v) = "+d.get(me).data2);
							}
							// System.out.println("**************");

						}
					}
				}
				index = findMinIndex();
				// System.out.println(index + " " + d.get(index).data2);
				v.set(index, true);
				count++;
			}

			System.out.println("Elaxistes apostasis apo ton " + usr);
			for (int i = 0; i < d.size(); i++) {
				System.out.println(d.get(i).data1 + " " + d.get(i).data2);
			}
		}else{
			System.out.println("Wrong username!");
		}
	}