Adjacency
Matrix
Topological
Order
Iterator
import
java.io.*;
import
java.uFl.*;
public
class
AdjMatrixGraph
{
int
g[][];
private
int
indegree[];
private
String
vertexNames[];
private
int
numNodes;
Adjacency
Matrix
Topological
Order
Iterator
public
AdjMatrixGraph(String
filename)
{
BufferedReader
b
=
null;
try
{
b
=
new
BufferedReader(new
FileReader(filename));
numNodes
=
Integer.parseInt(b.readLine());
}
catch
(ExcepFon
e)
{
System.out.println("Error
in
file
contents
or
file
not
found");
}
g
=
new
int[numNodes][numNodes];
vertexNames
=
new
String[numNodes];
Adjacency
Matrix
Topological
Order
Iterator
try
{
for
(int
i
=
0;
i
<
numNodes;
i++)
vertexNames[i]
=
b.readLine();
String
line
=
b.readLine();
while
(line
!=
null)
{
Scanner
s
=
new
Scanner(line);
int
v1
=
getNodeNum(s.next());
int
v2
=
getNodeNum(s.next());
g[v1][v2]
=
1;
line
=
b.readLine();
}
}
catch
(ExcepFon
e)
{
System.out.println("Error
in
file
contents"+e.getMessage());
}
}
Adjacency
Matrix
Topological
Order
Iterator
private
int
getNodeNum(String
v)
{
for
(int
i
=
0;
i
<
numNodes;
i++)
if
(vertexNames[i].equals(v))
return
i;
return
-‐1;
}
private
void
iniFalizeIndegree()
{
for
(int
i
=
0;
i
<
numNodes;
i++)
indegree[i]
=
0;
for
(int
j
=
0;
j
<
numNodes;
j++)
for
(int
i
=
0;
i
<
numNodes;
i++)
indegree[j]
=
indegree[j]+g[i][j];
}
Adjacency
Matrix
Topological
Order
Iterator
public
class
TopoIterator
implements
Iterator<String>
{
private
Queue<Integer>
nodeQueue;
public
TopoIterator()
{
indegree
=
new
int[numNodes];
iniFalizeIndegree();
nodeQueue
=
new
LinkedList<Integer>();
for
(int
i
=
0;
i
<
numNodes;
i++)
if
(indegree[i]
==
0)
.