0001 /* 0002 * 基于邻接边表实现图的边结构 0003 */ 0004 0005 package dsa; 0006 0007 public class Edge_List implements Edge { 0008 //变量 0009 protected Object info;//当前边中存放的数据元素 0010 protected Position ePosInE;//当前边在所属的图的边表中的位置 0011 protected Position vPosInV[];//当前边两个端点在顶点表中的位置 0012 protected Position ePosInI[];//当前边在其两个端点的关联边表中的位置 0013 //约定:第0(1)个顶点分别为尾(头)顶点 0014 //禁止头、尾顶点相同的边 0015 protected int type;//(经过遍历之后)边被归入的类别 0016 0017 //构造方法:在图G中,生成一条从顶点u到v的新边(假定该边尚不存在) 0018 public Edge_List(Graph G, Vertex_List u, Vertex_List v, Object x) { 0019 info = x;//数据元素 0020 ePosInE = G.insert(this);//当前边在所属的图的边表中的位置 0021 vPosInV = new DLNode[2];//当前边两个端点在顶点表中的位置 0022 vPosInV[0] = u.getVPosInV(); vPosInV[1] = v.getVPosInV(); 0023 ePosInI = new DLNode[2];//当前边在其两个端点的关联边表中的位置 0024 ePosInI[0] = u.outEdges.insertLast(this);//当前边加入u的邻接(出)边表 0025 ePosInI[1] = v.inEdges.insertLast(this);//当前边加入v的邻接(入)边表 0026 type = UNKNOWN; 0027 } 0028 0029 //返回当前边的信息 0030 public Object getInfo() { return info; } 0031 //将当前边的信息更新为x,并返回原先的信息 0032 public Object setInfo(Object x) { Object e = info; info = x; return e; } 0033 0034 //取当前边在所属的图的边集E中的位置 0035 public Position getEPosInE() { return ePosInE; } 0036 //取v[i]在顶点集V中的位置(i=0或1,分别对应于起点、终点) 0037 public Position getVPosInV(int i) { return vPosInV[i]; } 0038 //当前边在其两个端点的关联边集I(v[i])中的位置 0039 public Position getEPosInI(int i) { return ePosInI[i]; } 0040 0041 //读取、设置边的类别(针对遍历) 0042 public int getType() { return type; } 0043 public int setType(int t) { int tt = type; type = t; return tt; } 0044 0045 }