图的设计与实现(二)

2014-11-24 11:59:54 · 作者: · 浏览: 119
aph getNeighbors():vertex not in graph");
VertexInfo vtxInfo=vInfo.get(index);
return vtxInfo.dataValue;
}
public T getParent()
{
// int index=getVInfoIndex();
// if(index==-1)
throw new IllegalArgumentException("DiGraph getNeighbors():vertex not in graph");
// VertexInfo vtxInfo=vInfo.get(index);
// return vtxInfo.parent;
}
private int getVInfoIndex(Object v)
{
Integer indexObj=vtxMap.get(v);
if(indexObj==null)
return -1;
else
return indexObj;
}
public int inDegree(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.inDegree;
}
public void initData()
{
for(int i=0;i
{
if(vInfo.get(i).occupied)
{
vInfo.get(i).dataValue=Integer.MAX_VALUE;
}
}
}
public int outDegree(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.edgeList.size();
}
public DiGraph readGraph(String filename)
{
if(filename==null)
return null;
File file=new File(filename);
try
{
Scanner inputStream=new Scanner(new FileInputStream(file));
while(inputStream.hasNext())
{
inputStream.nextLine();
}
} catch (FileNotFoundException e)
{
e.printStackTrace();
}
return null;
}
private void removedFixup(int index)
{
Iterator iter=null;
Edge e=null;
VertexInfo vtxInfo=vInfo.get(index),edgeVtxInfo;
vtxInfo.occupied=false;
availStack.push(index);
for(int i=0;i
{
edgeVtxInfo=vInfo.get(i);
//check if vertex is valid
if(edgeVtxInfo.occupied)
{
iter=edgeVtxInfo.edgeList.iterator();
while(iter.hasNext())
{
e=iter.next();
if(e.dest==index)
{
iter.remove();
numEdges--;
break;
}
}
}
}
numEdges-=vtxInfo.edgeList.size();
iter=vtxInfo.edgeList.iterator();
while(iter.hasNext())
{
e=iter.next();
edgeVtxInfo=vInfo.get(e.dest);
iter.remove();
edgeVtxInfo.inDegree--;
}
}
public boolean removeVertex(Object v)
{
int index=getVInfoIndex(v);
if(index==-1)
{
return false;
}
vtxMap.remove(v);
removedFixup(index);
return true;
}
public VertexColor setColor(T v,VertexColor c)
{
int index=getVInfoIndex(v);
if(index==-1)
{
throw new IllegalArgumentException("setC