亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? graph.java

?? 用圖形用戶界面表示的圖
?? JAVA
字號:
package hartech.kids.grapher;

import hartech.*;
import hartech.ds.Queue;
import java.awt.Dimension;

/**
 * <p>Title: 圖的遍歷、最小生成樹、最短路徑</p>
 *
 *
 * <p>Description:
 *
 * 采用鄰接矩陣做為圖存儲結(jié)構(gòu),有權(quán)無向圖,不相連的值為 -1
 *
 * 圖的遍歷中深度遍歷采用遞歸方法,廣度遍歷使用輔助隊列
 *
 * 最小生成樹采用克魯斯卡爾算法,使用一數(shù)組記錄節(jié)點的連通情況
 *
 * 圖的最短路徑采用迪杰斯特拉算法,使用隊列記錄依次途經(jīng)的路徑
 *
 * 修改:
 * 深度、廣度遍歷中 在列出第n節(jié)點相鄰的節(jié)點并一一入棧/隊時,相鄰最近的優(yōu)先入棧/隊
 *
 * </p>
 *
 * <p>Website: www.hartech.cn </p>
 * <p>Page: http://www.hartech.cn/blog/blogview.asp?logID=88 </p>
 *
 * <p>Date: 2006-09-08 </p>
 */
public class Graph {

  // 圖鄰接矩陣
  private static int[][] arcs;
  // 節(jié)點數(shù)
  private static int num;
  // 記錄是否訪問過
  private static boolean[] hasVisit;

  // 記錄訪問過的前一個節(jié)點,用于統(tǒng)計線路總長度
  static int pre;

  // 深度優(yōu)先遍歷,給出圖鄰接矩陣和開始遍歷的節(jié)點
  public static void traverse_DFS(int[][] arcs_in, int begin) {
    pre = begin;
    if (arcs_in == null || arcs_in.length == 0 ||
        arcs_in.length != arcs_in[0].length || begin < 0) {
      System.err.println("wrong arcs[][] or begin!");
      return;
    }
    arcs = arcs_in;
    num = arcs.length;
    hasVisit = new boolean[num];

    DFS(begin);
  }

  private static void DFS(int begin) {
    hasVisit[begin] = true;
    Main.Q_DFS.enQueue(begin);
    Main.length_DFS += Main.arcs[pre][begin];
    pre = begin;

    int min, n = 0;
    for (int i = 1; i < num; i++) {
      // 距離最短的優(yōu)先入棧
      min = Integer.MAX_VALUE;
      for (int j = 0; j < num; j++) {
        if (!hasVisit[j] && arcs[begin][j] != -1 && arcs[begin][j] < min) {
          min = arcs[begin][j];
          n = j;
        }
      }
      if (min == Integer.MAX_VALUE) {
        break;
      }
      else {
        DFS(n);
      }
    }
  }

  // 廣度優(yōu)先遍歷,給出圖鄰接矩陣和開始遍歷的節(jié)點
  public static void traverse_BFS(int[][] arcs_in, int begin) {
    pre = begin;
    if (arcs_in == null || arcs_in.length == 0 ||
        arcs_in.length != arcs_in[0].length || begin < 0) {
      System.err.println("wrong arcs[][] or begin!");
      return;
    }
    arcs = arcs_in;
    num = arcs.length;
    hasVisit = new boolean[num];
    Queue queue = new Queue();

    hasVisit[begin] = true;
    queue.enQueue(begin);
    int temp, min, n = 0;
    while (!queue.isEmpty()) {
      temp = ( (Integer) queue.deQueue()).intValue();
      for (int i = 1; i < num; i++) {
        // 距離最短的優(yōu)先入隊
        min = Integer.MAX_VALUE;
        for (int j = 0; j < num; j++) {
          if (!hasVisit[j] && arcs[temp][j] != -1 && arcs[temp][j] < min) {
            min = arcs[temp][j];
            n = j;
          }
        }
        if (min == Integer.MAX_VALUE) {
          break;
        }
        else {
          hasVisit[n] = true;
          queue.enQueue(n);
          Main.Q_BFS.enQueue(n);
          Main.length_BFS += Main.arcs[pre][n];
          pre = n;
        }
      }
    }
  }

  // 構(gòu)造最小生成樹,采用克魯斯卡爾算法
  // 使用一數(shù)組記錄節(jié)點的連通情況
  public static void miniSpanTree(int[][] arcs_in) {
    if (arcs_in == null || arcs_in.length == 0 ||
        arcs_in.length != arcs_in[0].length) {
      System.err.println("wrong arcs[][]!");
      return;
    }
    arcs = arcs_in;
    num = arcs.length;

    // 使用一數(shù)組記錄節(jié)點的連通情況
    // 如 group[0]=0 表示節(jié)點未和任何節(jié)點連通
    // group[0]=group[3]=group[5]=2 表示節(jié)點0、3、5為同一連通圖內(nèi),該連通圖的標識為 2
    int[] group = new int[num];
    boolean finish = false;

    int temp = 0, min, n1 = 0, n2 = 0, groupNum = 0;
    // 到全部group[n]等于同一數(shù)值,也就是處于同一連通圖才結(jié)束
    while (!finish) {

      // 遍歷所有路徑,無向圖,僅遍歷矩陣上三角
      // 找出最短的且不在同一連通圖的(group[n1]!=group[n2]),或兩節(jié)點都未加入連通圖的
      min = Integer.MAX_VALUE;
      for (int i = 0; i < num; i++) {
        for (int j = i + 1; j < num; j++) {
          if (arcs[i][j] < min && arcs[i][j] != -1) {
            if (group[i] != group[j] || (group[i] == 0 && group[j] == 0)) {
              min = arcs[i][j];
              n1 = i;
              n2 = j;
            }
          }
        }
      }
      // 無路了
      if (min == Integer.MAX_VALUE) {
        break;
      }

      Main.Q_tree.enQueue(new Dimension(n1, n2));
      Main.length_tree += Main.arcs[n1][n2];

      // 加入連通圖組
      if (group[n1] == 0 && group[n2] == 0) {
        groupNum++;
        group[n1] = groupNum;
        group[n2] = groupNum;
      }
      else if (group[n1] != 0 && group[n2] != 0) {
        temp = group[n2];
        for (int i = 0; i < num; i++) {
          if (group[i] == temp) {
            group[i] = group[n1];
          }
        }
      }
      else {
        if (group[n1] == 0) {
          group[n1] = group[n2];
        }
        else {
          group[n2] = group[n1];
        }
      }

      // 到全部group[n]等于同一數(shù)值且不為0,也就是處于同一連通圖才結(jié)束
      temp = 1;
      while (temp < num && group[temp] == group[0]) {
        temp++;
      }
      if (group[0] != 0 && temp == num) {
        finish = true;
      }
    }
    if (!finish) {
      System.out.println("圖為非強連通圖");
    }
  }

  // 圖的最短路徑,給出圖鄰接矩陣,起點,終點,打印出途經(jīng)的節(jié)點
  // 采用迪杰斯特拉算法
  public static void shortestPath_DIJ(int[][] arcs_in, int begin, int end) {
    if (arcs_in == null || arcs_in.length == 0 ||
        arcs_in.length != arcs_in[0].length) {
      System.err.println("wrong arcs[][]!");
      return;
    }
    arcs = arcs_in;
    num = arcs.length;
    // 標識節(jié)點是否已找到最短路徑,從begin到n 為finish[n]=true;
    boolean[] finish = new boolean[num];
    // 記錄從 begin 到 n 的最短路徑為 min[n]
    int[] D = new int[num];
    // 使用隊列記錄路徑途經(jīng)節(jié)點
    Queue[] queue = new Queue[num];

    // 初始化
    for (int i = 0; i < num; i++) {
      D[i] = arcs[begin][i];
      finish[i] = false;
      queue[i] = new Queue();
    }
    finish[begin] = true;
    D[begin] = -1;

    int v = 0, min = 0;
    // 一個一個循環(huán)找出最短距離(共num-1個)
    for (int i = 1; i < num; i++) {
      min = Integer.MAX_VALUE;
      // 掃描找出非final集中最小的D[]
      for (int w = 0; w < num; w++) {
        if (!finish[w] && D[w] < min && D[w] != -1) {
          v = w;
          min = D[w];
        }
      }

      finish[v] = true;
      // 已找到目標,退出循環(huán)
      if (v == end) {
        queue[v].enQueue(v);
        Main.Q_shortest = queue[v].clone();
        Main.length_short = D[v];
        break;
      }

      // 更新各D[]數(shù)據(jù)
      for (int w = 0; w < num; w++) {
        if (!finish[w] && arcs[v][w] != -1) {
          if ( (arcs[v][w] + min) < D[w] || D[w] == -1) {
            D[w] = arcs[v][w] + min;
            queue[w] = queue[v].clone();
            queue[w].enQueue(v);
          }
        }
      }
      queue[v].enQueue(v);
    }
  }

  public static void main(String[] args) {
    /**
     * test:
     * 深度遍歷結(jié)果:
     *  -> 0 -> 1 -> 3 -> 2 -> 4 -> 5 -> 6 -> 7
     * 廣度遍歷結(jié)果:
     * -> 0 -> 1 -> 2 -> 4 -> 5 -> 3 -> 6 -> 7
     * 最小生成樹:
     * -> [0,1] -> [0,2] -> [0,5] -> [1,3] -> [0,4] -> [5,6] -> [6,7]
     * 從7到4的最短路徑:
     * [7] -> [4]:	 -> 7 -> 6 -> 5 -> 0 -> 4
     */
    int arcs[][] = {
        {
        -1, 1, 2, -1, 3, 2, -1, -1}, {
        1, -1, -1, 2, -1, -1, -1, -1}, {
        2, -1, -1, 3, -1, -1, -1, -1}, {
        -1, 2, 3, -1, -1, -1, -1, -1}, {
        3, -1, -1, -1, -1, 6, -1, -1}, {
        2, -1, -1, -1, 6, -1, 4, -1}, {
        -1, -1, -1, -1, -1, 4, -1, 4}, {
        -1, -1, -1, -1, -1, -1, 4, -1}
    };
    // 書上P174,圖7.16 的圖結(jié)構(gòu)
    int arcs2[][] = {
        {
        -1, 6, 1, 5, -1, -1}, {
        6, -1, 5, -1, 3, -1}, {
        1, 5, -1, 5, 6, 4}, {
        5, -1, 5, -1, -1, 2}, {
        -1, 3, 6, -1, -1, 5}, {
        -1, -1, 4, 2, 6, -1}
    };
    traverse_DFS(arcs, 0);

    traverse_BFS(arcs, 0);

    miniSpanTree(arcs);

    shortestPath_DIJ(arcs, 7, 4);
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
777亚洲妇女| 日本麻豆一区二区三区视频| 国产成人av自拍| 精品成人私密视频| 蜜桃久久av一区| 日韩久久免费av| 国产成人免费在线视频| 国产精品美女久久久久久久网站| 极品少妇一区二区三区精品视频 | 99精品热视频| 亚洲色图丝袜美腿| 一本色道久久综合狠狠躁的推荐| 一区二区激情小说| 欧美日韩第一区日日骚| 日本欧洲一区二区| 久久精品亚洲精品国产欧美 | 日本亚洲视频在线| 日韩精品综合一本久道在线视频| 国产大片一区二区| 亚洲精品免费在线| 欧美一级高清片| 国产一区二区日韩精品| 中文字幕亚洲视频| 欧美一区二区福利视频| 国产精品羞羞答答xxdd| 国产精品久久久久毛片软件| 欧美午夜电影在线播放| 精品综合久久久久久8888| 国产欧美精品在线观看| av一区二区不卡| 午夜精品影院在线观看| 久久精品免视看| 欧洲视频一区二区| 日本亚洲电影天堂| 国产精品久久久久影院老司| 欧美日韩久久久久久| 国产精品亚洲午夜一区二区三区| 亚洲精品视频在线看| 欧美电视剧免费观看| 国产**成人网毛片九色 | 国产乱一区二区| 国产欧美一区二区精品忘忧草| 成人一区二区三区在线观看| 日韩1区2区日韩1区2区| 亚洲色图视频网| 久久嫩草精品久久久久| 欧美影片第一页| 国产成人免费在线| 一区二区三区蜜桃| 久久综合久久综合亚洲| 99久久精品免费| 日韩激情一二三区| 国产欧美日韩在线观看| 精品视频一区二区不卡| 国产精品自在在线| 亚洲国产精品久久久久秋霞影院| 日韩一级高清毛片| 欧美日韩日日骚| 99精品视频在线播放观看| 国产一区二区三区在线观看免费视频 | 日韩电影一区二区三区| 亚洲天堂成人网| 中文字幕免费观看一区| 精品黑人一区二区三区久久| 91国模大尺度私拍在线视频| 国产在线不卡视频| 日韩精品每日更新| 日韩毛片高清在线播放| 精品99久久久久久| 欧美人动与zoxxxx乱| av激情综合网| 欧美mv和日韩mv的网站| 99re8在线精品视频免费播放| 麻豆国产欧美日韩综合精品二区 | 久久99久久99| 亚洲地区一二三色| 中文字幕中文乱码欧美一区二区| 色综合天天视频在线观看| 成人三级在线视频| 久久精品99国产精品| 丝袜亚洲精品中文字幕一区| 亚洲第一成年网| 成人欧美一区二区三区黑人麻豆| 欧美精品一区二区三| 日韩精品一区二区三区四区| 欧美色综合网站| 91丝袜美腿高跟国产极品老师 | 懂色av一区二区夜夜嗨| 国产不卡免费视频| 成人一区在线看| 99久久精品一区| 在线精品视频小说1| 在线观看视频91| 欧美精品v国产精品v日韩精品| 欧美军同video69gay| 欧美成人一级视频| 亚洲精品在线网站| ...av二区三区久久精品| 亚洲蜜臀av乱码久久精品蜜桃| 亚洲一区在线观看免费| 日日夜夜精品视频免费| 韩国女主播一区| 成人国产亚洲欧美成人综合网| 91蝌蚪porny九色| 在线不卡欧美精品一区二区三区| 精品久久久久久亚洲综合网| 日本一区二区三级电影在线观看| 亚洲精品国产成人久久av盗摄| 亚洲午夜久久久| 久久www免费人成看片高清| www.亚洲免费av| 欧美日韩在线一区二区| 欧美一级爆毛片| 国产精品久久久久影院色老大 | 中文字幕在线不卡一区二区三区| 亚洲一区二区三区四区在线| 极品少妇xxxx精品少妇偷拍| 97aⅴ精品视频一二三区| 777久久久精品| 国产精品久久久久久久久久久免费看| 亚洲免费在线看| 久久国产婷婷国产香蕉| 91视频com| 日韩女优av电影| 亚洲欧美偷拍另类a∨色屁股| 日本亚洲免费观看| 色综合天天综合网天天看片| 欧美电影免费观看高清完整版| 国产精品久久精品日日| 天天射综合影视| 91亚洲精品乱码久久久久久蜜桃 | 国模娜娜一区二区三区| 欧美色网一区二区| 中文字幕在线观看一区| 极品销魂美女一区二区三区| 欧美图片一区二区三区| 国产精品丝袜一区| 久久精品国产99| 欧洲国内综合视频| 国产精品久久久久久久久免费桃花 | 亚洲欧洲av另类| 免费在线观看一区| 91免费观看国产| 久久久亚洲欧洲日产国码αv| 亚洲1区2区3区4区| 91在线观看视频| 久久久.com| 黄色日韩网站视频| 6080国产精品一区二区| 亚洲免费观看高清完整版在线观看熊 | 91麻豆成人久久精品二区三区| 日韩精品一区二区三区在线| 亚洲国产成人va在线观看天堂| 99久久伊人精品| ww亚洲ww在线观看国产| 视频一区二区三区入口| 欧美日韩一区二区三区在线看| 亚洲欧洲国产日韩| 97久久人人超碰| 欧美激情综合网| 国产91高潮流白浆在线麻豆| 久久色成人在线| 国内久久婷婷综合| 精品国产免费一区二区三区四区 | 亚洲精品大片www| 成人国产电影网| 国产精品污污网站在线观看| 国内精品视频一区二区三区八戒| 日韩一区二区三区视频在线| 男女男精品网站| 欧美成人一区二区三区在线观看| 麻豆91在线播放| 久久综合色综合88| 国产乱一区二区| 中文字幕精品在线不卡| 丰满岳乱妇一区二区三区| 久久久91精品国产一区二区精品| 国产精品正在播放| 中文字幕av资源一区| 99精品视频免费在线观看| 一区二区三区中文在线| 欧美色综合网站| 蜜臀久久99精品久久久久宅男| 日韩亚洲国产中文字幕欧美| 精品在线一区二区| 国产欧美日韩另类视频免费观看| 成人激情免费视频| 亚洲欧美电影院| 在线成人av网站| 国产麻豆精品一区二区| 亚洲欧洲性图库| 欧美综合视频在线观看| 蜜臀av性久久久久蜜臀av麻豆| 26uuu亚洲综合色| 不卡的电视剧免费网站有什么| 一区二区三区日韩欧美精品| 欧美精品高清视频| 国产成人精品午夜视频免费| 一区二区激情小说| 精品福利一区二区三区|