package 图;
/*
最小生成树是用最少的边吧把所有的节点连接起来。
于是和图的深度优先搜素差不多。
*/
class Stack
{
private int[] array;
private int maxSize;
private int top;
public Stack(int size)
{
maxSize=size;
array=new int[maxSize];
top=-1;
}
public void push(int key)
{
array[++top]=key;
}
public int pop()
{
return array[top--];
}
//查看栈顶的元素
public int peek()
{
return array[top];
}
public boolean isEmpty()
{
return (top==-1);
}
}
class SVertex
{
private char cData;
//是否被访问的标记,若用private只能在本类中使用,用public则可在一个包中调用。
public boolean wasVisited;
public SVertex(char a)
{
cData=a;
wasVisited=false;
}
public char getChar()
{
return cData;
}
}
class Sgraph
{
private SVertex[] theArray;
private int nVertexs;
private int vSize;
private int[][] adjMat;
private Stack stack;
public Sgraph(int size)
{
vSize=size;
theArray =new SVertex[vSize];
adjMat=new int[vSize][vSize];
nVertexs=0;
for(int i=0;i<vSize;i++)
for(int j=0;j<vSize;j++)
adjMat[i][j]=0;
stack=new Stack(20);
}
public void addVertex(char key)
{
theArray[nVertexs++]=new SVertex(key);
}
public void display()
{
for(int i=0;i<nVertexs;i++)
System.out.print(theArray[i].getChar());
}
public void addEndge(int begin,int end)
{
adjMat[begin][end]=1;
adjMat[end][begin]=1;
}
public void adjDisplay(int begin,int end)
{
System.out.println(" shu zu"+adjMat[begin][end]);
}
public void display(int key)
{
System.out.println("idata"+theArray[key].getChar()+" ");
}
//最小生成树和图的深度优先搜素差不多,
public void dfs()
{
SVertex ver=theArray[0];
ver.wasVisited=true;
//display(0);
stack.push(0);
//一步一步
while(!stack.isEmpty())
{
//System.out.println("peek"+stack.peek());
int current=stack.peek();
int v=getVertex(current);
//System.out.println("VVV"+v);
if(v==-1)
stack.pop();
else
{
theArray[v].wasVisited=true;
stack.push(v);
//System.out.println("V"+v);
display(current);
display(v);
}
}
for(int i=0;i<nVertexs;i++)
theArray[i].wasVisited=false;
}
public int getVertex(int key)
{
for(int j=0;j<nVertexs;j++)
{
//System.out.println("["+key+"]"+"["+j+"]"+adjMat[key][j]);
//System.out.println(theArray[j].wasVisited);
if(adjMat[key][j]==1&&theArray[j].wasVisited==false)
return j;
}
return -1;
}
}
public class mst
{
public static void main(String[] args)
{
Sgraph grap=new Sgraph(10);
grap.addVertex('A');
grap.addVertex('B');
grap.addVertex('C');
grap.addVertex('D');
grap.addVertex('E');
grap.addEndge(0, 1);
grap.addEndge(0, 2);
grap.addEndge(0, 3);
grap.addEndge(0, 4);
grap.addEndge(1, 2);
grap.addEndge(1, 3);
grap.addEndge(1, 4);
grap.addEndge(2,3);
grap.addEndge(2,4);
grap.addEndge(3,4);
grap.display();
System.out.println("visited:");
grap.dfs();
System.out.println();
}
}