图的深度遍历

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();
  
  
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值