各种图算法

原创 2015年07月07日 18:42:23
public class TestForString{
     public static void main(String[] arg){
         int[] array=new int[]{1,8,6,3,9,7};
         mergeSort(array,0,5);
        for(int i:array){
             System.out.print(i+" ");
         }
     }
    
     public static int[] mergeSort(int[] array,int low,int heigh){
         if(low>=heigh){
             return array;
         }
        
         int mid =(low + heigh)/2;
         mergeSort(array,low,mid);
         mergeSort(array,mid+1,heigh);
         return merge(array,low,mid,heigh);
        
     }
    
    
    
     private static int[] merge(int[] array, int low, int mid, int heigh) {
        int[] temp = new int[heigh-low+1];
        int indexOfLow = low;
        int indexOfHeigh = mid+1;
        int indexOfTemp = 0;
        
        
        
        while(indexOfLow<=mid&&indexOfHeigh<=heigh){
            if(array[indexOfLow]<array[indexOfHeigh]){
                temp[indexOfTemp++]=array[indexOfLow++];
            
            }else{
                temp[indexOfTemp++]=array[indexOfHeigh++];
                
            }
        }
        if(indexOfLow<=mid){
            temp[indexOfTemp++]=array[indexOfLow++];
            
        }
        if(indexOfHeigh<=heigh){
            temp[indexOfTemp++]=array[indexOfHeigh++];
        }
        
        for(int i:temp){
            
            array[low++]=i;
        }
        
        System.out.println();
        
        return array;
    }

    public static void insertSort(int[] array){
         for(int i=1;i<array.length;i++){
             int toBeInsert=array[i];
             int n=i;
             while(n>0&&toBeInsert>array[n-1]){
                 array[n]=array[n-1];
                 n--;
             }
             array[n]=toBeInsert;
        }
     }
    
    
     public static void swap(int[] array,int index1,int index2){
         int temp = array[index1];
         array[index1]=array[index2];
         array[index2]=temp;
     }
}

class Edge{
    public int srcVert;
    public int destVert;
    public int distance;
    
    public Edge(int sv,int dv,int d){
        srcVert = sv;
        destVert = dv;
        distance = d;
    }
    
}

class PriorityQ{
    
    private final int SIZE=20;
    private Edge[] queArray;
    private int size;
    
    public PriorityQ(){
        queArray = new Edge[SIZE];
        size = 0;
    }
    
    public void insert(Edge item){
        int j;
        for(j=0;j<size;j++){
            if(item.distance >= queArray[j].distance){
                break;
            }
        }
        
        for(int i=size;i>j;i--){
            queArray[i]=queArray[i-1];
        }
        
        queArray[j]=item;
        
        size++;
    }
    
    public Edge removeMin(){
        return queArray[--size];
    }
    
    public void removeN(int n){
        for(int i=n;i<size-1;i++){
            queArray[i]=queArray[i+1];
        }
        
        size--;
    }
    
    public Edge peekMin(){
        return queArray[size-1];
    }
    
    public int size(){
        return size;
    }
    
    public boolean isEmpty(){
        return size==0;
    }
    
    public Edge peekN(int n){
        return queArray[n];
    }
    
    public int find(int findDex){
        for(int i=0;i<size;i++){
            if(queArray[i].destVert==findDex){
                return i;
            }
        }
        
        return -1;
    }
        
}


class DistPar{
    public int distance;
    public int parentVert;
    public DistPar(int pv,int d){
        distance = d;
        parentVert = pv;
    }
}


class Vertex{
    public char label;
    public boolean isInTree;
    
    public Vertex(char lab){
        this.label = lab;
        isInTree = false;
    }
}

class Graph{
    private final int MAX_VERS=20;
    private final int INFINITY=100000;
    private Vertex vertexList[];
    private int adjMat[][];
    private int currentVert;
    private PriorityQ thePQ;
    private int nTree;
    private int nVerts;
    private int startToCurrent;
    private DistPar sPath[];
    
    public Graph(){
        vertexList = new Vertex[MAX_VERS];
        adjMat = new int[MAX_VERS][MAX_VERS];
        nVerts =0;
        nTree=0;
        for(int i=0;i<MAX_VERS;i++){
            for(int j=0;j<MAX_VERS;j++){
                adjMat[i][j] = INFINITY;
            }
        }
        
        sPath = new DistPar[MAX_VERS];
    }
    
    public void addVertex(char lab){
        if(nVerts<MAX_VERS){
            vertexList[nVerts++]=new Vertex(lab);
        }
    }
    
    public void addEdge(int start,int end,int weight){
        adjMat[start][end]=weight;
        //adjMat[end][start]=weight;
    }
    
    public void displayVertex(int v){
        System.out.println(vertexList[v].label);
    }
    
    public void mstw(){
        currentVert = 0;
        thePQ = new PriorityQ();
        nTree = 0;
        
        while(nTree<nVerts-1){
            vertexList[currentVert].isInTree = true;
            nTree++;
            for(int i=0;i<nVerts;i++){
                if(vertexList[i].isInTree
                        ||i==currentVert
                        ||adjMat[currentVert][i]==INFINITY){
                    continue;
                }
                
                putIntoPq(currentVert,i,adjMat[currentVert][i]);
                
            }
            
            if(thePQ.isEmpty()){
                System.out.print("THE GRIP IS NOT CONNECTED!!!");
                return;
            }
            
            Edge min = thePQ.peekMin();
            currentVert = min.destVert;
        }
    }

    private void putIntoPq(int src, int des, int distance) {
        Edge edge = new Edge(src,des,distance);
        
        int indexOfEdge = thePQ.find(des);
        if(indexOfEdge==-1){
            thePQ.insert(edge);
            return;
        }
        
        Edge old = thePQ.peekN(indexOfEdge);
        if(old.distance>distance){
            thePQ.removeN(indexOfEdge);
            thePQ.insert(edge);
        }
        
        
    }
    
    
}




相关文章推荐

ForceAtlas2图布局算法

  • 2017年09月27日 15:04
  • 1.67MB
  • 下载

数据结构课设图综合算法

  • 2017年07月19日 10:43
  • 969KB
  • 下载

图像算法研究---Luma-Key,Chroma-Key抠图

介绍绿布或者蓝布抠图原理:Luma-Key、Chroma-Key抠图

HDU 2544 最短路【Dijkstra算法堆优化,Vector建图】

最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm...

flex 力导图 弹簧算法

  • 2015年03月17日 11:32
  • 158KB
  • 下载

图搜索的通用算法

  • 2014年11月12日 15:19
  • 24KB
  • 下载

数据结构-各种排序算法效率对比图

排序法 平均时间复杂度 最差情形 稳定度 额外空间 备注 冒泡排序 O(n2)  O(n2) 稳定 O(1) n小时较好 交换排序 O(n2)  O(n2) 不稳定 O(1) n小时较好 ...
  • tanggod
  • tanggod
  • 2014年02月13日 06:01
  • 4243

图算法例题

  • 2013年12月22日 18:33
  • 67KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:各种图算法
举报原因:
原因补充:

(最多只允许输入30个字)