aboutsummaryrefslogtreecommitdiff
path: root/Info/11/NTG/1/Dijkstra/CountPaths/CountPaths.java
blob: dd97d4a5754e4196e66f2866f4604a8025572c68 (plain)
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
import java.util.*;
class CountPaths {
	Stack connectionPath = new Stack();
	List<Stack> connectionPaths = new ArrayList<>();

	static class Node {
		int id;
		List<Node> childs;

		Node(int id) {
			this.id = id;
			childs = new ArrayList<>();
		}

		boolean equals(Node other) {
			return this.id == other.id;
		}

		List<Node> nextNodes() {
			return childs;
		}

		Node addNext(Node next) {
			childs.add(next);
			return this;
		}
	}

	// See https://stackoverflow.com/questions/9535819/find-all-paths-between-two-graph-nodes
	void findAllPaths(Node node, Node targetNode) {
	    for (Node nextNode : node.nextNodes()) {
	        if (nextNode.equals(targetNode)) {
	            Stack temp = new Stack();
	            for (Object node1 : connectionPath)
	            temp.add(node1);
	            connectionPaths.add(temp);
	        } else if (!connectionPath.contains(nextNode)) {
	            connectionPath.push(nextNode);
	            findAllPaths(nextNode, targetNode);
	            connectionPath.pop();
	        }
	    }
	}

	public static void main(String argv[]) {
		Node v1 = new Node(1);
		Node v2 = new Node(2);
		Node v3 = new Node(3);
		Node v4 = new Node(4);
		Node v5 = new Node(5);
		Node v6 = new Node(6);
		Node v7 = new Node(7);
		Node v8 = new Node(8);
		Node v9 = new Node(9);
		Node v10 = new Node(10);
		Node v11 = new Node(11);
		Node v12 = new Node(12);
		Node v13 = new Node(13);
		Node v14 = new Node(14);
		Node v15 = new Node(15);
		Node v16 = new Node(16);

		v1.addNext(v2);
		v2.addNext(v1).addNext(v4).addNext(v7);
		v3.addNext(v4).addNext(v6);
		v4.addNext(v2).addNext(v3).addNext(v9);
		v5.addNext(v8).addNext(v14);
		v6.addNext(v3).addNext(v4).addNext(v9).addNext(v10);
		v7.addNext(v2).addNext(v9).addNext(v11);
		v8.addNext(v5).addNext(v11).addNext(v15);
		v9.addNext(v4).addNext(v6).addNext(v7).addNext(v10).addNext(v11);
		v10.addNext(v6).addNext(v9).addNext(v11).addNext(v13);
		v11.addNext(v7).addNext(v8).addNext(v9).addNext(v10).addNext(v12).addNext(v15);
		v12.addNext(v11).addNext(v13);
		v13.addNext(v10).addNext(v12).addNext(v16);
		v14.addNext(v5).addNext(v8);
		v15.addNext(v11).addNext(v16);
		v16.addNext(v15).addNext(v13);


		CountPaths p = new CountPaths();
		p.findAllPaths(v13, v2);
		System.out.println(p.connectionPaths.size());

		p = new CountPaths();
		p.findAllPaths(v13, v14);
		System.out.println(p.connectionPaths.size());
	}
}