-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRandomGraph.java
More file actions
111 lines (95 loc) · 3.01 KB
/
Copy pathRandomGraph.java
File metadata and controls
111 lines (95 loc) · 3.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package kth.csc.inda;
import java.util.Random;
import java.util.Stack;
/**
* Created by Emil on 2015-04-22.
*/
public class RandomGraph {
private static int n;
private static Random rand;
private static boolean[] marked;
private static int count;
private static int biggestComp;
private static Graph graph;
public RandomGraph(int n, Graph graph) {
this.n = n;
this.graph = graph;
rand = new Random();
randomHashGraph();
}
/**
* Generera en HashGraph med randomvärden
*/
private static void randomHashGraph() {
while(graph.numEdges() < n) {
int from = rand.nextInt(n);
int to = rand.nextInt(n);
graph.addBi(from, to);
}
}
/**
* Hjälpmetod för DFS. Kör dfs från 0 till n, grafens 'längd'
* @param g
*/
private static void DFSgo(Graph g) {
marked = new boolean[n];
for(int i = 0; i < n; i++) {
if(!marked[i]) {
dfs(g, i, marked, 0);
}
}
}
/**
*
* @param g grafen som ska behandlas.
* @param v vilket värde som ska startas vid
* @param size storleken på komponenten
*
* dfs gör rekursiva kall för att gå igenom grafen. Kollar även vilken av komponenterna som är störst i grafen
* Samt hur många komponenter grafen innehåller.
*
**/
private static void dfs(Graph g, int v, boolean[] marked, int size) {
int sizeOfComp = size;
marked[v] = true;
sizeOfComp++;
if(biggestComp < sizeOfComp) {
biggestComp = sizeOfComp;
}
VertexIterator a = g.neighbors(v);
while(a.hasNext()) {
int i = a.next();
if (!marked[i]) {
dfs(g, i, marked, sizeOfComp);
count++;
}
}
}
/**
* Testar och printar ut tid och komponentinfo.
* @param args
*/
public static void main(String args[]) {
HashGraph hash = new HashGraph(10);
MatrixGraph matr = new MatrixGraph(10);
RandomGraph rand = new RandomGraph(10, hash);
RandomGraph rand2 = new RandomGraph(10, matr);
long startTime = System.nanoTime();
DFSgo(hash);
long estimatedTime = System.nanoTime() - startTime;
System.out.println("HASH");
System.out.println("Number of components = " + rand.count);
System.out.println("Size of the biggest component = " + rand.biggestComp);
System.out.println("TIME =" + estimatedTime);
count = 0;
biggestComp = 0;
long startTime2 = System.nanoTime();
DFSgo(matr);
long estimatedTime2 = System.nanoTime() - startTime2;
System.out.println("MATRIX");
System.out.println("Number of components = "+ rand2.count);
System.out.println("Size of the biggest component = " + rand2.biggestComp);
System.out.println("TIME =" + estimatedTime2);
System.out.println(hash.toString());
}
}