數據結構之圖

 

圖就是頂點和邊的集合。一般用鄰接表(鄰接鏈)表示。
線性主要從查找和刪除上初步接觸差別和效率。
樹主要概念在於遞歸,抽象建模。
而圖在抽象建模的層次上更進一層,主要是抓住圖的多對多的根本特徵,把多點當作一點,把新入點的邊算進來,算成一個超級大點。
剛開始會不容易懂。可是明白以後,比特殊的樹簡單多了。
package com.linson.datastrcture;

import java.util.ArrayList;
import java.util.List;



//圖就是頂點和邊的集合。
//線性主要從查找和刪除上初步接觸差別和效率。
//樹主要概念在於遞歸,抽象建模。
//而圖在抽象建模的層次上更進一層,主要是抓住圖的多對多的根本特徵,把多點當作一點,把新入點的邊算進來。
public class MyLinkGraph<T>
{
    //頂點
    public static class MyVertex<T>
    {
        public T mData;
        public MyEdge<T> mNextEdge;
        public Integer externInfo;//擴展字段:存儲動態權重。
        public List<MyVertex<T>> path;//擴展字段:存儲臨時最短路徑
        public MyVertex()
        {
            mData=null;
            mNextEdge=null;
            externInfo=Integer.MAX_VALUE;
            path=new ArrayList<MyVertex<T>>();
        }
        public MyVertex(T value,MyEdge<T> next)
        {
            mData=value;
            mNextEdge=next;
            externInfo=Integer.MAX_VALUE;
            path=new ArrayList<MyVertex<T>>();
        }
    }
    
    //
    public static class MyEdge<T>
    {
        public MyVertex<T> mEndNode;
        public Integer mWeight;
        public MyEdge<T> mOtherEdge;//注意這裏是另外一條邊,意思是從固定點開始的全部邊。而不是一條連一條的邊。
        
        public MyEdge(Integer _weight,MyEdge<T> next,MyVertex<T> EndNode)
        {
            mEndNode=EndNode;
            mWeight=_weight;
            mOtherEdge=next;
        }
    }
    
    public MyLinkGraph()
    {}
    
    @SuppressWarnings("unchecked")
    public MyLinkGraph(int vetexSum)
    {
        mVertexs= new MyVertex[vetexSum];
    }
    
    public MyVertex<T>[] mVertexs=null;
}
相關文章
相關標籤/搜索