Skip to content

Commit c07e959

Browse files
Merge pull request TheAlgorithms#312 from MaengMaeng/master
Add MatrixGraphs
2 parents 191eaae + 2fadcdc commit c07e959

File tree

1 file changed

+145
-0
lines changed

1 file changed

+145
-0
lines changed
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
public class MatrixGraphs {
2+
3+
public static void main(String args[]) {
4+
AdjacencyMatrixGraph graph = new AdjacencyMatrixGraph(10);
5+
graph.addEdge(1, 2);
6+
graph.addEdge(1, 5);
7+
graph.addEdge(2, 5);
8+
graph.addEdge(1, 2);
9+
graph.addEdge(2, 3);
10+
graph.addEdge(3, 4);
11+
graph.addEdge(4, 1);
12+
graph.addEdge(2, 3);
13+
System.out.println(graph);
14+
}
15+
16+
}
17+
18+
class AdjacencyMatrixGraph {
19+
private int _numberOfVertices;
20+
private int _numberOfEdges;
21+
private int[][] _adjacency;
22+
23+
static final int EDGE_EXIST = 1;
24+
static final int EDGE_NONE = 0;
25+
26+
public AdjacencyMatrixGraph(int givenNumberOfVertices) {
27+
this.setNumberOfVertices(givenNumberOfVertices);
28+
this.setNumberOfEdges(0);
29+
this.setAdjacency(new int[givenNumberOfVertices][givenNumberOfVertices]);
30+
for (int i = 0; i < givenNumberOfVertices; i++) {
31+
for (int j = 0; j < givenNumberOfVertices; j++) {
32+
this.adjacency()[i][j] = AdjacencyMatrixGraph.EDGE_NONE;
33+
}
34+
}
35+
}
36+
37+
private void setNumberOfVertices(int newNumberOfVertices) {
38+
this._numberOfVertices = newNumberOfVertices;
39+
}
40+
41+
public int numberOfVertices() {
42+
return this._numberOfVertices;
43+
}
44+
45+
private void setNumberOfEdges(int newNumberOfEdges) {
46+
this._numberOfEdges = newNumberOfEdges;
47+
}
48+
49+
public int numberOfEdges() {
50+
return this._numberOfEdges;
51+
}
52+
53+
private void setAdjacency(int[][] newAdjacency) {
54+
this._adjacency = newAdjacency;
55+
}
56+
57+
private int[][] adjacency() {
58+
return this._adjacency;
59+
}
60+
61+
private boolean adjacencyOfEdgeDoesExist(int from, int to) {
62+
return (this.adjacency()[from][to] != AdjacencyMatrixGraph.EDGE_NONE);
63+
}
64+
65+
public boolean vertexDoesExist(int aVertex) {
66+
if (aVertex >= 0 && aVertex < this.numberOfVertices()) {
67+
return true;
68+
} else {
69+
return false;
70+
}
71+
}
72+
73+
public boolean edgeDoesExist(int from, int to) {
74+
if (this.vertexDoesExist(from) && this.vertexDoesExist(to)) {
75+
return (this.adjacencyOfEdgeDoesExist(from, to));
76+
}
77+
78+
return false;
79+
}
80+
81+
/**
82+
* this method adds an edge to the graph between two specified
83+
* verticies
84+
*
85+
* @param from the data of the vertex the edge is from
86+
* @param to the data of the vertex the edge is going to
87+
* @return returns true if the edge did not exist, return false if it already did
88+
*/
89+
public boolean addEdge(int from, int to) {
90+
if (this.vertexDoesExist(from) && this.vertexDoesExist(to)) {
91+
if (!this.adjacencyOfEdgeDoesExist(from, to)) {
92+
this.adjacency()[from][to] = AdjacencyMatrixGraph.EDGE_EXIST;
93+
this.adjacency()[to][from] = AdjacencyMatrixGraph.EDGE_EXIST;
94+
this.setNumberOfEdges(this.numberOfEdges() + 1);
95+
return true;
96+
}
97+
}
98+
99+
return false;
100+
}
101+
102+
/**
103+
* this method removes an edge from the graph between two specified
104+
* verticies
105+
*
106+
* @param from the data of the vertex the edge is from
107+
* @param to the data of the vertex the edge is going to
108+
* @return returns false if the edge doesn't exist, returns true if the edge exists and is removed
109+
*/
110+
public boolean removeEdge(int from, int to) {
111+
if(!this.vertexDoesExist(from) || !this.vertexDoesExist(to)) {
112+
if (this.adjacencyOfEdgeDoesExist(from, to)) {
113+
this.adjacency()[from][to] = AdjacencyMatrixGraph.EDGE_NONE;
114+
this.adjacency()[to][from] = AdjacencyMatrixGraph.EDGE_NONE;
115+
this.setNumberOfEdges(this.numberOfEdges() - 1);
116+
return true;
117+
}
118+
}
119+
return false;
120+
}
121+
122+
/**
123+
* this gives a list of verticies in the graph and their adjacencies
124+
*
125+
* @return returns a string describing this graph
126+
*/
127+
public String toString() {
128+
String s = new String();
129+
s = " ";
130+
for (int i = 0; i < this.numberOfVertices(); i++) {
131+
s = s + String.valueOf(i) + " ";
132+
}
133+
s = s + " \n";
134+
135+
for (int i = 0; i < this.numberOfVertices(); i++) {
136+
s = s + String.valueOf(i) + " : ";
137+
for (int j = 0; j < this.numberOfVertices(); j++) {
138+
s = s + String.valueOf(this._adjacency[i][j]) + " ";
139+
}
140+
s = s + "\n";
141+
}
142+
return s;
143+
}
144+
145+
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy