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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main.java

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

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import hartech.ui.*;
import hartech.ds.*;

/**
 * <p>Title: 圖的應用演示 </p>
 *
 * <p>Description: </p>
 *
 * <p>Website: www.hartech.cn </p>
 * <p>Page: http://www.hartech.cn/blog/blogview.asp?logID=88 </p>
 *
 * <p>Date: 2006-09-07 </p>
 */
public class Main {

  // 圖標
  static JLabel[] icon;

  // 圖標數量
  static final int icon_num = 25;

  // 圖存儲結構
  static int arcs[][];

  // 圖的存儲結構二
  // 專門做為最短路徑的參數
  // 因如用上面的arcs[][]則為完全圖,點與點間最短距離當然就是兩點用直線相連,沒什么意思
  // 該結構繼承上面的arcs[][],但僅是相鄰距離最小的四個節點可通,到其它節點不通
  static int arcs_last4[][];

  // 設置僅連相鄰距離最小的 LAST_NUM 個節點可通
  static final int LAST_NUM = 2;

  // 圖標移動范圍
  static final int panel_width = 715, panel_height = 290;

  // 四個隊列,圖運算結果保存于該四隊列,第五個為路徑圖
  // panel根據這些隊列畫線、箭頭
  static Queue Q_DFS = new Queue();
  static Queue Q_BFS = new Queue();
  static Queue Q_tree = new Queue();
  static Queue Q_shortest = new Queue();
  static Queue Q_route = new Queue();
  // 記錄各種遍歷的路徑總長度,用于在右下角顯示
  static int length_DFS = 0, length_BFS = 0, length_tree = 0, length_short = 0,
  length_route = 0;

  // 預設25個圖標的坐標
  static final int[] location_x = {
      203, 180, 40, 458, 99, 118, 230, 409, 27, 519, 259, 496, 695, 292, 415,
      295, 320, 504, 342, 181, 575, 562, 621, 419, 694};
  static final int[] location_y = {
      134, 181, 0, 112, 188, 73, 242, 169, 271, 56, 72, 287, 10, 210, 247, 129,
      0, 178, 54, 35, 219, 140, 77, 30, 196};

  // 初始化
  static {
    // arcs[][]
    arcs = new int[icon_num][icon_num];
    arcs_last4 = new int[icon_num][icon_num];
    // 自己到自己為不聯通,-1
    for (int i = 0; i < icon_num; i++) {
      arcs[i][i] = -1;
    }

    // icon[]
    icon = new JLabel[icon_num];
    for (int i = 0; i < icon_num; i++) {
      icon[i] = new JLabel(ComboBoxRenderer.createImageIcon("images/smiles/" +
          i + ".gif"));
      icon[i].setBounds(location_x[i], location_y[i], 22, 22);
      icon[i].addMouseMotionListener(new MouseMotionListener_drag_icon());
    }

    updateArcs();
    //printLocations();
  }

  // 更新各圖標距離到圖存儲結構 arcs[][]
  // 全聯通,自己到自己為不聯通:-1
  static void updateArcs() {
    int temp = 0;
    // 因無向圖,僅計算矩陣上三角
    for (int i = 0; i < icon_num; i++) {
      for (int j = i + 1; j < icon_num; j++) {
        temp = (icon[i].getX() - icon[j].getX()) *
            (icon[i].getX() - icon[j].getX()) +
            (icon[i].getY() - icon[j].getY()) * (icon[i].getY() - icon[j].getY());
        arcs[i][j] = (int) Math.pow(temp, 0.5);
      }
    }
    // 復制到下三角
    for (int i = 0; i < icon_num; i++) {
      for (int j = 0; j < i; j++) {
        arcs[i][j] = arcs[j][i];
      }
    }
  }

  // 用updateArcs()計算出所有距離,再把非最小四的節點設為 -1
  // 先求出有向圖,再轉成無向圖
  static void updateArcs_last4() {
    updateArcs();

    int min, p = 0;
    Q_route.clean();
    length_route = 0;
    boolean[] isLast4 = new boolean[icon_num];
    for (int i = 0; i < icon_num; i++) {
      for (int n = 0; n < icon_num; n++) {
        isLast4[n] = false;
      }
      // 找出四個最短的
      for (int n = 0; n < LAST_NUM; n++) {
        min = Integer.MAX_VALUE;
        for (int j = 0; j < icon_num; j++) {
          if (arcs[i][j] != -1 && arcs[i][j] < min && !isLast4[j]) {
            min = arcs[i][j];
            p = j;
          }
        }
        if (min == Integer.MAX_VALUE) {
          break;
        }
        else {
          isLast4[p] = true;
        }
      }
      // 輸入到arcs_last4[][]
      for (int n = 0; n < icon_num; n++) {
        if (isLast4[n]) {
          arcs_last4[i][n] = arcs[i][n];
        }
        else {
          arcs_last4[i][n] = -1;
        }
      }
    }

    // 把上面的有向圖變成無向圖
    for (int i = 0; i < icon_num; i++) {
      for (int j = 0; j < icon_num; j++) {
        if (arcs_last4[i][j] != -1 && arcs_last4[j][i] == -1) {
          arcs_last4[j][i] = arcs_last4[i][j];
        }
      }
    }

    // 遍歷上三角,把上面所得的無向圖中所有路徑入隊列和統計總長度
    for (int i = 0; i < icon_num; i++) {
      for (int j = i + 1; j < icon_num; j++) {
        if (arcs_last4[i][j] != -1) {
          // 輸出到 Main.Q_route 隊列,用于畫路徑圖
          Q_route.enQueue(new Dimension(i, j));
          length_route += arcs_last4[i][j];
        }
      }
    }
    UI.jTextField_route.setText(String.valueOf(length_route));
  }

  // 打印出當前所有圖標的坐標
  static void printLocations() {
    StringBuffer out_x = new StringBuffer("{");
    StringBuffer out_y = new StringBuffer("{");
    Point d;
    for (int i = 0; i < icon_num; i++) {
      d = icon[i].getLocation();
      out_x.append( (int) d.getX() + ",");
      out_y.append( (int) d.getY() + ",");
    }
    System.out.println(out_x + "}");
    System.out.println(out_y + "}");
  }

  public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        J.setLookAndFeel("Metal");
        new UI();
      }
    });
  }
}

// 圖標拖動事件
class MouseMotionListener_drag_icon
    implements MouseMotionListener {
  static JLabel temp;
  static int x, y;
  public void mouseMoved(MouseEvent e) {
  }

  public void mouseDragged(MouseEvent e) {
    temp = ( (JLabel) e.getSource());
    x = temp.getX() + e.getX() - 10;
    y = temp.getY() + e.getY() - 10;
    if (x > ( (Dimension) UI.drawPanel.getSize()).width - 25) {
      x = ( (Dimension) UI.drawPanel.getSize()).width - 25;
    }
    if (x < 5) {
      x = 5;
    }
    if (y > ( (Dimension) UI.drawPanel.getSize()).height - 25) {
      y = ( (Dimension) UI.drawPanel.getSize()).height - 25;
    }
    if (y < 5) {
      y = 5;
    }
    temp.setLocation(x, y);
    UI.drawPanel.repaint();
  }
}

class ActionListener_buttons
    implements ActionListener {
  public void actionPerformed(ActionEvent e) {

    //
    if (e.getActionCommand().equals("DFS_begin")) {
      Main.Q_DFS.clean();
      Main.length_DFS = 0;
      if (UI.jCheckBox_show_route.isSelected()) {
        Main.updateArcs_last4();
        Graph.traverse_DFS(Main.arcs_last4,
                           UI.jComboBox_DFS_begin.getSelectedIndex());
      }
      else {
        Main.updateArcs();
        Graph.traverse_DFS(Main.arcs,
                           UI.jComboBox_DFS_begin.getSelectedIndex());
      }
      UI.jTextField_DFS.setText(String.valueOf(Main.length_DFS));
      UI.drawPanel.repaint();
    }
    else if (e.getActionCommand().equals("DFS_clean")) {
      Main.Q_DFS.clean();
      Main.length_DFS = 0;
      UI.jTextField_DFS.setText(String.valueOf(Main.length_DFS));
      UI.drawPanel.repaint();
    }

    //
    else if (e.getActionCommand().equals("BFS_begin")) {
      Main.Q_BFS.clean();
      Main.length_BFS = 0;
      if (UI.jCheckBox_show_route.isSelected()) {
        Main.updateArcs_last4();
        Graph.traverse_BFS(Main.arcs_last4,
                           UI.jComboBox_BFS_begin.getSelectedIndex());
      }
      else {
        Main.updateArcs();
        Graph.traverse_BFS(Main.arcs,
                           UI.jComboBox_BFS_begin.getSelectedIndex());
      }
      UI.jTextField_BFS.setText(String.valueOf(Main.length_BFS));
      UI.drawPanel.repaint();
    }
    else if (e.getActionCommand().equals("BFS_clean")) {
      Main.Q_BFS.clean();
      Main.length_BFS = 0;
      UI.jTextField_BFS.setText(String.valueOf(Main.length_BFS));
      UI.drawPanel.repaint();
    }

    //
    else if (e.getActionCommand().equals("tree_begin")) {
      Main.Q_tree.clean();
      Main.length_tree = 0;
      if (UI.jCheckBox_show_route.isSelected()) {
        Main.updateArcs_last4();
        Graph.miniSpanTree(Main.arcs_last4);
      }
      else {
        Main.updateArcs();
        Graph.miniSpanTree(Main.arcs);
      }
      UI.jTextField_tree.setText(String.valueOf(Main.length_tree));
      UI.drawPanel.repaint();
    }
    else if (e.getActionCommand().equals("tree_clean")) {
      Main.Q_tree.clean();
      Main.length_tree = 0;
      UI.jTextField_tree.setText(String.valueOf(Main.length_tree));
      UI.drawPanel.repaint();
    }

    //
    else if (e.getActionCommand().equals("shortest_begin")) {
      Main.Q_shortest.clean();
      Main.length_short = 0;
      if (UI.jCheckBox_show_route.isSelected()) {
        Main.updateArcs_last4();
        Graph.shortestPath_DIJ(Main.arcs_last4,
                               UI.jComboBox_shortest_begin.getSelectedIndex()
                               , UI.jComboBox_shortest_end.getSelectedIndex());
      }
      else {
        Main.updateArcs();
        Graph.shortestPath_DIJ(Main.arcs,
                               UI.jComboBox_shortest_begin.getSelectedIndex()
                               , UI.jComboBox_shortest_end.getSelectedIndex());
      }
      UI.jTextField_short.setText(String.valueOf(Main.length_short));
      UI.drawPanel.repaint();
    }
    else if (e.getActionCommand().equals("shortest_clean")) {
      Main.Q_shortest.clean();
      Main.length_short = 0;
      UI.jTextField_short.setText(String.valueOf(Main.length_short));
      UI.drawPanel.repaint();
    }
    else if (e.getActionCommand().equals("show_route")) {
      if (UI.jCheckBox_show_route.isSelected()) {
        Main.updateArcs_last4();
        UI.drawPanel.repaint();
      }
      else {
        Main.Q_route.clean();
        Main.length_route = 0;
        UI.jTextField_route.setText(String.valueOf(Main.length_route));
        UI.drawPanel.repaint();
      }
    }
    else if (e.getActionCommand().equals("show_number")) {
      UI.drawPanel.repaint();
    }
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品1区2区| 91.com在线观看| 欧美午夜电影网| 久久久噜噜噜久久人人看| 亚洲午夜免费电影| 国产99久久久国产精品潘金 | 国产精品一区二区三区网站| 91蝌蚪porny九色| 国产喂奶挤奶一区二区三区| 日本成人在线网站| 欧美视频在线一区| 最新中文字幕一区二区三区| 国产精品白丝jk白祙喷水网站 | 在线观看视频欧美| 中文字幕欧美区| 国产一区二区视频在线播放| 91精品国产综合久久精品麻豆| 亚洲色图欧洲色图| 成人精品一区二区三区四区| 国产亚洲人成网站| 国产乱子伦视频一区二区三区| 日韩精品一区二区三区视频| 首页国产欧美久久| 欧美理论电影在线| 午夜精品影院在线观看| 欧美在线免费观看视频| 一区二区三区色| 色综合久久88色综合天天6| 国产精品二三区| 成人高清免费观看| ...av二区三区久久精品| 91网站视频在线观看| 亚洲欧美福利一区二区| av一本久道久久综合久久鬼色| 国产精品高潮久久久久无| av在线不卡观看免费观看| 一区在线观看视频| 91偷拍与自偷拍精品| 一卡二卡三卡日韩欧美| 欧美日韩电影一区| 日本最新不卡在线| 欧美成人猛片aaaaaaa| 国产美女久久久久| 国产精品女同互慰在线看| 91在线码无精品| 亚洲自拍偷拍九九九| 欧美日本不卡视频| 国产一区二区调教| 亚洲色图视频网站| 欧美日韩高清一区| 国产精品一品视频| 亚洲日本成人在线观看| 欧美日韩久久一区| 精品在线一区二区| 亚洲色图.com| 日韩欧美一区二区三区在线| 国产精品小仙女| 一区二区在线免费观看| 日韩亚洲欧美一区| 成人黄色小视频在线观看| 亚洲高清免费在线| 久久久久久免费| 色老头久久综合| 精品综合久久久久久8888| 日韩一区欧美小说| 欧美一区二区三区人| 成人深夜福利app| 午夜精品影院在线观看| 中文字幕的久久| 欧美理论电影在线| av不卡一区二区三区| 日本欧美一区二区| 中文字幕一区二| 日韩三级视频在线看| 99视频精品全部免费在线| 九九久久精品视频| 亚洲18色成人| 国产精品麻豆欧美日韩ww| 日韩一级免费观看| 日本乱码高清不卡字幕| 国产乱码精品一区二区三区av| 一区二区三区中文在线| 国产三级一区二区| 91麻豆精品国产自产在线观看一区| a亚洲天堂av| 国产91清纯白嫩初高中在线观看| 午夜精品福利在线| 亚洲乱码精品一二三四区日韩在线| 欧美电视剧在线观看完整版| 在线观看91视频| 91香蕉视频污| 99久久99久久综合| 国产91精品欧美| 国产精品一区二区不卡| 免费人成精品欧美精品| 亚洲午夜久久久久久久久电影院| 亚洲色图制服丝袜| 亚洲欧洲成人av每日更新| 国产亚洲精品超碰| 精品国精品自拍自在线| 欧美一区二区三区四区高清| 欧美裸体bbwbbwbbw| 欧洲人成人精品| 色婷婷激情一区二区三区| 97精品久久久午夜一区二区三区 | 欧美日韩国产一二三| 日本韩国视频一区二区| 91色porny蝌蚪| 色综合天天综合狠狠| av一区二区三区四区| 91在线精品一区二区| 99精品国产91久久久久久| 99久久精品国产导航| 91日韩在线专区| 在线观看国产91| 欧美乱熟臀69xxxxxx| 777a∨成人精品桃花网| 日韩三级.com| 精品国产免费一区二区三区四区| 精品久久免费看| 国产日产欧产精品推荐色| 国产拍揄自揄精品视频麻豆| 国产精品国产三级国产专播品爱网| 国产精品网曝门| 亚洲另类中文字| 丝袜美腿亚洲色图| 蜜臀av国产精品久久久久| 精品一区二区久久| 成人小视频免费在线观看| 99精品一区二区| 欧美精品视频www在线观看| 日韩一区二区视频在线观看| 精品国产欧美一区二区| 中文字幕一区二区三区在线不卡 | 国模大尺度一区二区三区| 狠狠色狠狠色综合系列| 风间由美性色一区二区三区| 99re在线精品| 91精品国产乱| 国产午夜亚洲精品羞羞网站| 亚洲日本在线视频观看| 日韩激情一二三区| 国产91丝袜在线播放九色| 欧美亚男人的天堂| 精品欧美久久久| 亚洲视频一二三区| 日韩成人免费电影| 成人性生交大合| 精品视频一区二区不卡| 久久毛片高清国产| 亚洲午夜久久久久久久久电影网| 国内精品伊人久久久久av影院| 99久久精品免费看国产| 6080亚洲精品一区二区| 国产精品免费视频网站| 日韩av午夜在线观看| proumb性欧美在线观看| 日韩亚洲欧美一区二区三区| 亚洲桃色在线一区| 精品一区二区在线观看| 色伊人久久综合中文字幕| 26uuu色噜噜精品一区二区| 一区二区三区四区乱视频| 国产精品资源在线看| 欧美日韩国产成人在线91| 国产精品高潮呻吟久久| 久草这里只有精品视频| 欧美日韩1区2区| 亚洲女爱视频在线| 成熟亚洲日本毛茸茸凸凹| 日韩欧美视频在线| 一区二区三区精品视频| 粉嫩在线一区二区三区视频| 日韩欧美国产一二三区| 亚洲高清中文字幕| 在线中文字幕不卡| 国产精品美女久久久久高潮| 久久福利视频一区二区| 正在播放一区二区| 一区二区理论电影在线观看| 成人av电影在线| 久久精品视频一区二区三区| 美女高潮久久久| 欧美一二三四在线| 午夜精品久久久久久久| 欧美日韩五月天| 亚洲自拍欧美精品| 欧美三级在线视频| 亚洲电影一区二区三区| 色综合久久中文字幕综合网| 最新中文字幕一区二区三区 | 紧缚捆绑精品一区二区| 91精品国产91综合久久蜜臀| 亚洲v中文字幕| 欧美剧在线免费观看网站| 一区二区三区欧美在线观看| 色综合天天在线| 亚洲成av人片| 欧美一区二区三区不卡| 免费久久99精品国产|