日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

转动风车java_java实现-图的相关操作

發布時間:2023/12/2 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 转动风车java_java实现-图的相关操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

importjava.util.LinkedList;public classGraph {private int vertexSize;//頂點的數量

private int[] vertexs;//頂點數組

private int[][] matrix;//矩陣

private boolean[] isVisited;//是否訪問過

private static final int MAX_WEIGHT = 1000;public Graph(intvertexSize){this.vertexSize =vertexSize;

matrix= new int[vertexSize][vertexSize];

vertexs= new int[vertexSize];for(int i = 0;i < vertexSize;i++){

vertexs[i]=i;

}

isVisited= new boolean[vertexSize];

}public intgetVertexSize() {returnvertexSize;

}public void setVertexSize(intvertexSize) {this.vertexSize =vertexSize;

}public int[] getVertexs() {returnvertexs;

}public void setVertexs(int[] vertexs) {this.vertexs =vertexs;

}public int[][] getMatrix() {returnmatrix;

}public void setMatrix(int[][] matrix) {this.matrix =matrix;

}//獲取某個頂點的出度

public int getOutDegree(intindex){int[] arr =matrix[index];int degree = 0;for(int i = 0;i < arr.length;i++){if(arr[i] !=0 && arr[i]

degree++;

}

}returndegree;

}//獲取兩個頂點之間的權值

public int getWeight(int v1,intv2){return matrix[v1][v2] == 0 ? 0 : (matrix[v1][v2] == MAX_WEIGHT ? -1: matrix[v1][v2]);

}//深度優先遍歷

private void depthFirstSearch(inti){

isVisited[i]= true;int w =getFirstNeighor(i);while(w != -1){if (!isVisited[w]){//需要遍歷該頂點

System.out.println("訪問到了 " + w + "頂點");

depthFirstSearch(w);

}

w= getNextNeighor(i,w);//第一個相對于w的鄰接點

}

}//對外提供深度優先遍歷

public voiddepthFirstSearch(){

isVisited= new boolean[vertexSize];for(int i = 0;i < vertexSize;i++){if(!isVisited[i]){

System.out.println("訪問到了 " + i + "頂點");

depthFirstSearch(i);

}

}

isVisited= new boolean[vertexSize];

}//廣度優先遍歷(使用到了隊列)

public voidbroadFirstSearch(){

isVisited= new boolean[vertexSize];for(int i = 0;i < vertexSize;i++){if(!isVisited[i]){

broadFirstSearch(i);

}

}

isVisited= new boolean[vertexSize];

}private void broadFirstSearch(inti){int u;//獲取隊列的頭結點

int w;//獲取第一個鄰接點

LinkedList queue = new LinkedList<>();

System.out.println("訪問到了 " + i + "結點");

isVisited[i]= true;

queue.add(i);while(!queue.isEmpty()){

u=(Integer)(queue.removeFirst()).intValue();

w=getFirstNeighor(u);while(w != -1){if(!isVisited[w]) {

System.out.println("訪問到了 " + w + "結點");

isVisited[w]= true;

queue.add(w);

}

w=getNextNeighor(u,w);

}

}

}//獲取某個結點的第一個鄰接點

public int getFirstNeighor(intindex){for(int i = 0;i < vertexSize;i++){if(matrix[index][i] > 0 && matrix[index][i]

}

}return -1;

}//根據前一個鄰接點的下標來獲取下一個鄰接點(就是根據相對于第一個鄰接點獲取下一個鄰接點)

/** @param v1表示要找的頂點

* @param v2表示該頂點相對于哪個鄰接點去獲取下一個鄰接點

* **/

public int getNextNeighor(int v1,intv2){for(int i = v2 + 1;i < vertexSize;i++){if(matrix[v1][i] > 0 && matrix[v1][i]

}

}return -1;

}//普里母算法

public voidprim(){int[] lowcost = new int[vertexSize]; //最小代價頂點權值的數組,為0表示已經獲取到了最小的權值

int[] adjvex = new int[vertexSize]; //放頂點權值

int min = 0;//最小值

int minId = 0;//最小的下標

int sum = 0; //總和

for(int i = 1;i < vertexSize;i++){

lowcost[i]= matrix[0][i];

}for(int i = 1;i < vertexSize;i++){

min=MAX_WEIGHT;

minId= 0;for(int j = 1;j < vertexSize;j++){if(lowcost[j] < min && lowcost[j] > 0){

min=lowcost[j];

minId=j;

}

}//for(int a = 0;a < vertexSize;a++){//System.out.print(adjvex[a] + " ");//}

System.out.println("頂點為:" + adjvex[minId] + ",權值為:" + min + "最小值的下標為:" +minId);

sum+=min;

lowcost[minId]= 0;for(int j = 1;j < vertexSize;j++){if(lowcost[j] != 0 && matrix[minId][j]

lowcost[j]=matrix[minId][j];

adjvex[j]=minId;

}

}

}

System.out.println("最小生成樹的權值和為:" +sum);

}public static voidmain(String[] args){

Graph graph= new Graph(9);int[] a1 = new int[]{0,10,MAX_WEIGHT,MAX_WEIGHT,MAX_WEIGHT,11,MAX_WEIGHT,MAX_WEIGHT,MAX_WEIGHT};int[] a2 = new int[]{10,0,18,MAX_WEIGHT,MAX_WEIGHT,MAX_WEIGHT,16,MAX_WEIGHT,12};int[] a3 = new int[]{MAX_WEIGHT,MAX_WEIGHT,0,22,MAX_WEIGHT,MAX_WEIGHT,MAX_WEIGHT,MAX_WEIGHT,8};int[] a4 = new int[]{MAX_WEIGHT,MAX_WEIGHT,22,0,20,MAX_WEIGHT,24,16,21};int[] a5 = new int[]{MAX_WEIGHT,MAX_WEIGHT,MAX_WEIGHT,20,0,26,MAX_WEIGHT,7,MAX_WEIGHT};int[] a6 = new int[]{11,MAX_WEIGHT,MAX_WEIGHT,MAX_WEIGHT,26,0,17,MAX_WEIGHT,MAX_WEIGHT};int[] a7 = new int[]{MAX_WEIGHT,16,MAX_WEIGHT,MAX_WEIGHT,MAX_WEIGHT,17,0,19,MAX_WEIGHT};int[] a8 = new int[]{MAX_WEIGHT,MAX_WEIGHT,MAX_WEIGHT,16,7,MAX_WEIGHT,19,0,MAX_WEIGHT};int[] a9 = new int[]{MAX_WEIGHT,12,8,21,MAX_WEIGHT,MAX_WEIGHT,MAX_WEIGHT,MAX_WEIGHT,0};

graph.matrix[0] =a1;

graph.matrix[1] =a2;

graph.matrix[2] =a3;

graph.matrix[3] =a4;

graph.matrix[4] =a5;

graph.matrix[5] =a6;

graph.matrix[6] =a7;

graph.matrix[7] =a8;

graph.matrix[8] =a9;//System.out.println("出度為:" + graph.getOutDegree(4));//System.out.println("權值:" + graph.getWeight(0,4));

}

}

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的转动风车java_java实现-图的相关操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。