I am trying to implement a depth first search and breadth first search on a text file. The code is supposed to skip the words in the text file, but perform depth first search and breadth first search on the letters after the words. I am getting an incompatible type error. Below is my code and text file.
prog
Scanner myScanner = new Scanner(new File(args[0]));
Graph obj = new Graph();
while(myScanner.hasNextLine())
{
if(myScanner.hasNext("add"))
{
Node[] n1=new Node[1];
Node[] n2=new Node[2];
line 23 **obj.add(n1);**
obj.add(n2);
obj.connectNode(n1,n2);
}
if(myScanner.hasNext("breadth"))
{
obj.bfs();
}
if(myScanner.hasNext("depth"))
{
obj.dfs();
}
if(myScanner.hasNext("remove"))
{
Node[] n1=new Node[1];
Node[] n2=new Node[2];
obj.remove();
obj.remove();
obj.connectNode(n1,n2);
}
}
}
}
Graph.java
public class Graph
{
public Node rootNode;
public ArrayList nodes=new ArrayList();
public int[][] adjMatrix;//Edges will be represented as adjacency Matrix
int size;
public void setRootNode(Node n)
{
this.rootNode=n;
}
public Node getRootNode()
{
return this.rootNode;
}
public void add(Node n)
{
nodes.add(n);
}
//This method will be called to make connect two nodes
public void connectNode(Node start,Node end)
{
if(adjMatrix==null)
{
size=nodes.size();
adjMatrix=new int[size][size];
}
int startIndex=nodes.indexOf(start);
int endIndex=nodes.indexOf(end);
adjMatrix[startIndex][endIndex]=1;
adjMatrix[endIndex][startIndex]=1;
}
private Node getUnvisitedChildNode(Node n)
{
int index=nodes.indexOf(n);
int j=0;
while(j<size)
{
if(adjMatrix[index][j]==1 && ((Node)nodes.get(j)).visited==false)
{
return (Node)nodes.get(j);
}
j++;
}
return null;
}
//BFS traversal of a tree is performed by the bfs() function
public void bfs()
{
//BFS uses Queue data structure
Queue q=new LinkedList();
q.add(this.rootNode);
printNode(this.rootNode);
rootNode.visited=true;
while(!q.isEmpty())
{
Node n=(Node)q.remove();
Node child=null;
while((child=getUnvisitedChildNode(n))!=null)
{
child.visited=true;
printNode(child);
q.add(child);
}
}
//Clear visited property of nodes
remove();
}
//DFS traversal of a tree is performed by the dfs() function
public void dfs()
{
//DFS uses Stack data structure
Stack s=new Stack();
s.push(this.rootNode);
rootNode.visited=true;
printNode(rootNode);
while(!s.isEmpty())
{
Node n=(Node)s.peek();
Node child=getUnvisitedChildNode(n);
if(child!=null)
{
child.visited=true;
printNode(child);
s.push(child);
}
else
{
s.pop();
}
}
//Clear visited property of nodes
remove();
}
//Utility methods for clearing visited property of node
void remove()
{
int i=0;
while(i<size)
{
Node n=(Node)nodes.get(i);
n.visited=false;
i++;
}
}
//Utility methods for printing the node's label
private void printNode(Node n)
{
System.out.print(n.label+" ");
}
}
Node.java
public class Node
{
public char label;
public boolean visited=false;
public Node(char l)
{
this.label=l;
}
}
input.txt
add A B
add A C
add B D
add D E
add E A
add E B
breadth A
depth A
remove A B
add B A
breadth B
depth B