package d20图的最小生成树;
public class Vertex {
public char label;
public boolean wasVisited;
public Vertex (char label){
this.label = label;
}
}
package d20图的最小生成树;
import d03栈和队列.MyStack;
public class Graph {
private Vertex[] vertexList;
private int [] [] adjMat;
private int maxSize=20;
private MyStack stack;
private int nVertex;
public Graph(){
vertexList = new Vertex[maxSize];
adjMat = new int [maxSize][maxSize];
for(int i = 0;i<maxSize;i++){
for(int j = 0;j<maxSize;j++){
adjMat[i][j]=0;
}
}
nVertex=0;
stack = new MyStack();
}
public void addVertex (char label){
vertexList[nVertex++]=new Vertex(label);
}
public void addEdge(int start,int end){
adjMat[start][end]=1;
adjMat[end][start]=1;
}
public int getadjUnvisitedVertex(int v){
for(int i = 0;i<nVertex;i++){
if(adjMat[v][i]==1&&vertexList[i].wasVisited==false){
return i;
}
}
return -1;
}
public void dfs(){
vertexList[0].wasVisited=true;
stack.push(0);
displayVertex(0);
while(!stack.isEmpty()){
int v = getadjUnvisitedVertex((int)stack.peel());
if(v==-1){
stack.pop();
}else{
vertexList[v].wasVisited=true;
displayVertex(v);
stack.push(v);
}
}
for(int i = 0;i<nVertex;i++){
vertexList[i].wasVisited=false;
}
}
public void displayVertex(int v){
System.out.print(vertexList[v].label+" ");
}
public void mst(){
vertexList[0].wasVisited=true;
stack.push(0);
while(!stack.isEmpty()){
int currentVertex = stack.peel();
int v = getadjUnvisitedVertex(currentVertex);
if(v==-1){
stack.pop();
}else{
vertexList[v].wasVisited=true;
stack.push(v);
displayVertex(currentVertex);
System.out.print("-");
displayVertex(v);
System.out.println(" ");
}
}
for(int i = 0;i<nVertex;i++){
vertexList[i].wasVisited=false;
}
}
}
package d20图的最小生成树
public class TestGraph {
public static void main(String[] args) {
Graph g = new Graph()
g.addVertex('A')
g.addVertex('B')
g.addVertex('C')
g.addVertex('D')
g.addVertex('E')
g.addEdge(0, 1)
g.addEdge(0, 2)
g.addEdge(0, 3)
g.addEdge(0, 4)
g.addEdge(1, 2)
g.addEdge(1, 3)
g.addEdge(1, 4)
g.addEdge(2, 3)
g.addEdge(2, 4)
g.addEdge(3, 4)
g.mst()
}
}