图的设计与实现(一)

2014-11-24 11:59:54 · 作者: · 浏览: 116
[java]
package deno.Graphics;
import java.awt.Color;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
import practice.AStack;
import practice.LinkedQueue;
public class DiGraph implements Graph
{
private HashMap vtxMap;
private ArrayList> vInfo;
private int numEdges;
private AStack availStack;
private class IteratorImpl implements Iterator
{
Iterator iter;
T lastValue=null;
public IteratorImpl()
{
iter=vtxMap.keySet().iterator();
}
public boolean hasNext()
{
return iter.hasNext();
}
public T next()
{
lastValue=iter.next();
return lastValue;
}
public void remove()
{
if(lastValue==null)
throw new IllegalStateException("Graph vertex set iterator call to next()"+"required before calling remove()");
int index=getVInfoIndex(lastValue);
iter.remove();//remove the current vertex from the map
removedFixup(index);//remove all edges that terminate at lastValue and update the in-degree
// each neighbor of lastValue
}
}
public DiGraph()
{
vtxMap=new HashMap();
availStack=new AStack();
vInfo=new ArrayList>();
numEdges=0;
}
public String toString()
{
String gStr="";
Iterator iter=null;
Edge e=null;
for(int i=0;i
{
VertexInfo v=vInfo.get(i);
if(vInfo.get(i).occupied)
{
gStr+=v.vertex+":"+"in-degree"+v.inDegree+" out-degree "+v.edgeList.size()+"\n";
gStr+="Edges:";
iter=v.edgeList.iterator();
while(iter.hasNext())
{
e=iter.next();
gStr+=vInfo.get(e.dest).vertex+"("+e.weight+")";
}
gStr+="\n";
}
}
return gStr;
}
public void colorWhite()
{
for(int i=0;i
{
if(vInfo.get(i).occupied==true)
{
vInfo.get(i).Color=VertexColor.WHITE;
}
//System.out.println(vInfo.get(i).Color);
}
}
private Edge findEdge(LinkedList edgeList,int dest)
{
return null;
}
public VertexColor getColor(T v)
{
int index=getVInfoIndex(v);
if(index==-1)
throw new IllegalArgumentException("DiGraph getNeighbors():vertex not in graph");
VertexInfo vtxInfo=vInfo.get(index);
return vtxInfo.Color;
}
public int getData(T v)
{
int index=getVInfoIndex(v);
if(index==-1)
throw new IllegalArgumentException("DiGr