各种图算法

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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值