package 图;
//无向图示例
class StackX
{
private int[] array;
private int maxSize;
private int top;
public StackX(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 Vertex
{
private char cData;
//是否被访问的标记,若用private只能在本类中使用,用public则可在一个包中调用。
public boolean wasVisited;
public Vertex(char a)
{
cData=a;
wasVisited=false;
}
public char getChar()
{
return cData;
}
}
class graphics
{
private Vertex[] theArray;
private int nVertexs;
private int vSize;
private int[][] adjMat;
private StackX stack;
public graphics(int size)
{
vSize=size;
theArray =new Vertex[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 StackX(20);
}
public void addVertex(char key)
{
theArray[nVertexs++]=new Vertex(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()
{
Vertex ver=theArray[0];
ver.wasVisited=true;
display(0);
stack.push(0);
while(!stack.isEmpty())
{
//System.out.println("peek"+stack.peek());
int v=getVertex(stack.peek());
//System.out.println("VVV"+v);
if(v==-1)
stack.pop();
else
{
theArray[v].wasVisited=true;
//System.out.println("V"+v);
display(v);
stack.push(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 dfs
{
public static void main(String[] args)
{
graphics grap=new graphics(10);
grap.addVertex('A');
grap.addVertex('B');
grap.addVertex('C');
grap.addVertex('D');
grap.addVertex('E');
grap.addEndge(0, 1);
//grap.adjDisplay(0, 1);
grap.addEndge(1, 2);
//grap.adjDisplay(1, 2);
grap.addEndge(0, 3);
//grap.adjDisplay(0, 3);
grap.addEndge(3, 4);
//grap.adjDisplay(3, 4);
grap.display();
System.out.println("visited:");
grap.dfs();
System.out.println();
}
}