this.adjmatrix[i][j]=(i==j)?
0:
Max;
}
returnthis.vertexlist.length()-1;
}
publicvoidinsertEdge(inti,intj,intweight){
intn=this.vertexCount();
if(i>=0&&i=0&&i!
=j&&this.adjmatrix[i][j]==Max)
this.adjmatrix[i][j]=weight;
}
publicvoidinsertEdge(Edgeedge){
this.insertEdge(edge.start,edge.dest,edge.weight);
}
}
创建有向图邻接矩阵算法:
(可使用前无向图邻接矩阵算法)
创建有向网邻接矩阵算法:
(可使用前无向图邻接矩阵算法)
(3)输出邻接矩阵结果算法
publicstaticvoidmain(String[]args){
String[]vertices={"A","B","C","D","E"};
Edgeedges[]={newEdge(0,1,1),newEdge(0,3,1),newEdge(1,0,1),
newEdge(1,2,1),newEdge(1,3,1),newEdge(2,1,1),newEdge(2,3,1),
newEdge(2,4,1),newEdge(3,0,1),newEdge(3,1,1),newEdge(3,2,1),
newEdge(3,4,1),newEdge(4,2,1),newEdge(4,3,1),};
MatrixGraphgraph=newMatrixGraph(vertices,edges);
System.out.println("无向图:
"+graph.toString());
}
publicstaticvoidmain(String[]args){
String[]vertices={"A","B","C","D","E"};
Edgeedges[]={newEdge(0,1,5),newEdge(0,3,2),newEdge(1,0,5),
newEdge(1,2,7),newEdge(1,3,6),newEdge(2,1,7),newEdge(2,3,8),
newEdge(2,4,3),newEdge(3,0,2),newEdge(3,1,6),newEdge(3,2,8),
newEdge(3,4,9),newEdge(4,2,3),newEdge(4,3,9)};
MatrixGraphgraph=newMatrixGraph(vertices,edges);
System.out.println("无向网:
"+graph.toString());
}
publicstaticvoidmain(String[]args){
String[]vertices={"A","B","C","D","E"};
Edgeedges[]={newEdge(0,1,1),newEdge(0,3,1),
newEdge(1,3,1),newEdge(2,3,1),
newEdge(2,4,1),newEdge(3,1,1),newEdge(3,2,1),
newEdge(4,2,1),newEdge(4,3,1)};
MatrixGraphgraph=newMatrixGraph(vertices,edges);
System.out.println("有向图:
"+graph.toString());
}
publicstaticvoidmain(String[]args){
String[]vertices={"A","B","C","D","E"};
Edgeedges[]={newEdge(0,1,5),newEdge(0,3,2),
newEdge(1,3,6),newEdge(2,3,8),
newEdge(2,4,3),newEdge(3,1,9),newEdge(3,2,2),
newEdge(4,2,3),newEdge(4,3,9)};
MatrixGraphgraph=newMatrixGraph(vertices,edges);
System.out.println("有向网:
"+graph.toString());
}
测试结果粘贴如下:
2、图邻接表存储结构表示及基本操作算法实现
(1)邻接表存储结构类定义:
自定义如下:
publicclassVertex{
publicTdata;
publicSortedSinglyLinkedListadjlink;
publicVertex(Tdata){
this.data=data;
this.adjlink=newSortedSinglyLinkedList();
}
publicStringtoString(){
return"\n"+this.data.toString()+":
"+this.adjlink.toString();
}
}
(2)创建邻接表算法
创建无向网邻接表算法:
(可使用下有向网邻接表算法)
创建有向网邻接表算法:
publicclassAdjListGraph{
protectedSeqList>vertexlist;
publicAdjListGraph(intsize){
size=size<10?
10:
size;
this.vertexlist=newSeqList>(size);
}
publicAdjListGraph(T[]vertices,Edge[]edges){
this(vertices.length*2);
if(vertices==null)
return;
for(inti=0;iinsertVertex(vertices[i]);
if(edges!
=null)
for(intj=0;jinsertEdge(edges[j]);
}
publicStringtoString(){
return"出边表:
\n"+this.vertexlist.toString()+"\n";
}
publicintinsertVertex(Tx){
this.vertexlist.append(newVertex(x));
returnthis.vertexlist.length()-1;
}
publicintvertexCount(){
returnthis.vertexlist.length();
}
publicvoidinsertEdge(inti,intj,intweight){
if(i>=0&&i=0&&j=j){
Edgeedge=newEdge(i,j,weight);
SortedSinglyLinkedListadjlink=this.vertexlist.get(i).adjlink;
Nodefront=adjlink.head,p=front.next;
while(p!
=null&&pareTo(edge)<0){
front=p;
p=p.next;
}
if(p!
=null&&pareTo(edge)==0)
return;
front.next=newNode(edge,p);
}
}
publicvoidinsertEdge(Edgeedge){
this.insertEdge(edge.start,edge.dest,edge.weight);
}
(3)输出邻接表结果算法
publicstaticvoidmain(String[]args){
String[]vertices={"A","B","C","D","E"};
Edgeedges[]={newEdge(0,1,5),newEdge(0,3,2),newEdge(1,0,5),newEdge(3,0,2),
newEdge(2,4,3),newEdge(4,2,3)};
AdjListGraphgraph=newAdjListGraph(vertices,edges);
System.out.println("无向网:
"+graph.toString());
}
publicstaticvoidmain(String[]args){
String[]vertices={"A","B","C","D","E"};
Edgeedges[]={newEdge(0,1,5),newEdge(0,3,2),newEdge(1,0,6),newEdge(1,2,7),
newEdge(2,4,3),new