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

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

?? mstvisual.java

?? 最小生成樹的算法演示
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
      implements KeyListener {

    public void keyPressed(KeyEvent e) {}

    public void keyTyped(KeyEvent e) {}

    public void keyReleased(KeyEvent e) {
      paintResult = false;
      repaint();
      if (e.getKeyCode() == KeyEvent.VK_DELETE) {
        //當delete鍵按下時
        if (lineBrighter) {
          //如果當前有線高亮顯示,則刪除該線
          startNode.remove(currentLineIndex);
          endNode.remove(currentLineIndex);
          weight.remove(currentLineIndex);
          weightBack.remove(currentLineIndex);
          lineBrighter = false;
          repaint();
        }
        if (brighter) {
          //如果當前有結點高亮顯示,則刪除該結點以及相應的邊
          for (int i = 0; i < startNode.size(); i++) {
            int index = ( (Integer) startNode.get(i)).intValue();
            if (index == currentNodeIndex) {
              startNode.remove(i);
              endNode.remove(i);
              weight.remove(i);
              weightBack.remove(i);
              i--;
            }
            if (index > currentNodeIndex) {
              startNode.set(i, new Integer(index - 1));
            }
          }
          for (int i = 0; i < endNode.size(); i++) {
            int index = ( (Integer) endNode.get(i)).intValue();
            if (index == currentNodeIndex) {
              startNode.remove(i);
              endNode.remove(i);
              weight.remove(i);
              weightBack.remove(i);
              i--;
            }
            if (index > currentNodeIndex) {
              endNode.set(i, new Integer(index - 1));
            }
          }

          node.remove(currentNodeIndex);
          nodeName.remove(currentNodeIndex);
          brighter = false;
          repaint();
        }
      }

    };
  }

  //鼠標事件監聽類
  class MouseL
      implements MouseListener {

    public void mouseEntered(MouseEvent e) {}

    public void mouseExited(MouseEvent e) {}

    public void mousePressed(MouseEvent e) {
    }

    public void mouseClicked(MouseEvent e) {
      paintResult = false;
      if (e.getClickCount() == 2 && brighter) {
        String str = JOptionPane.showInputDialog(null, "請輸入新的結點名:",
                                                 "更改結點名",
                                                 JOptionPane.
                                                 INFORMATION_MESSAGE);
        if (str == null) {
          return;
        }
        else if (str.length() > 0) {
          nodeName.set(currentNodeIndex, str);
        }
        else {
          nodeName.set(currentNodeIndex, String.valueOf(name++));
        }
        repaint();
      }
      if (e.getClickCount() == 2 && lineBrighter) {
        //鼠標經過一條邊且雙擊時,更改權重
        System.out.println("Change weight");
        String str = JOptionPane.showInputDialog(null, "請輸入該邊的新權重",
                                                 "更改權重",
                                                 JOptionPane.
                                                 INFORMATION_MESSAGE);

        if (str != null && str.length() > 0) {
          weight.set(currentLineIndex, Integer.valueOf(str));
          weightBack.set(currentLineIndex, Integer.valueOf(str));
        }
        else {
          weight.set(currentLineIndex, new Integer(0));
          weightBack.set(currentLineIndex, new Integer(0));
        }
        return;
      }
      if (e.getClickCount() == 2 && !hasPre) {
        //鼠標雙擊且沒有一條邊的開始結點時,新建一個結點
        String str = JOptionPane.showInputDialog(null, "請輸入結點名:",
                                                 "新建結點",
                                                 JOptionPane.
                                                 INFORMATION_MESSAGE);
        if (str == null) {
          return;
        }
        else if (str.length() > 0) {
          nodeName.add(str);
        }
        else {
          nodeName.add(String.valueOf(name++));
        }
        node.add(new Point(e.getX(), e.getY()));
        drawNode = true;
        repaint();
      }
      if (e.getClickCount() == 2 && hasPre) {
        //鼠標雙擊且已經有了一條邊的開始結點時,取消該邊的創建,并將開始結點鏈表中的最后一個元素刪除
        hasPre = false;
        repaint();
        if (startNode.size() > 0) {
          startNode.removeLast();
        }
      }
    }

    public void mouseReleased(MouseEvent e) {
      paintResult = false;
      for (int i = 0; i < node.size(); i++) {
        if (e.getX() >= ( (Point) node.get(i)).x
            && e.getX() <= ( ( (Point) node.get(i)).x + 30)
            && e.getY() >= ( (Point) node.get(i)).y
            && e.getY() <= ( ( (Point) node.get(i)).y + 30)) {
          if (!hasPre) {
            //點擊鼠標,而且還不存在一條邊的開始結點時,將當前結點加入到開始結點鏈表中
            if (!move) {
              preNode.x = ( (Point) node.get(i)).x;
              preNode.y = ( (Point) node.get(i)).y;

              startNode.add(new Integer(i));
              hasPre = true;
              drawEdge = true;
            }
            else {
              move = false;
            }
          }
          else {
            //點擊鼠標,而且已經存在一條邊的開始結點時,將當前結點加入到結束結點鏈表中
            //創建一條邊并輸入該邊的權重
            currentNode.x = ( (Point) node.get(i)).x;
            currentNode.y = ( (Point) node.get(i)).y;
            if (i == ( (Integer) startNode.getLast()).intValue()) {
              return;
            }
            endNode.add(new Integer(i));
            findEdge = true;
            hasPre = false;
            repaint();

            String str = JOptionPane.showInputDialog(null, "請輸入該邊的權重",
                "新建邊", JOptionPane.INFORMATION_MESSAGE);

            if (str != null && str.length() > 0) {
              weight.add(Integer.valueOf(str));
              weightBack.add(Integer.valueOf(str));
            }
            else {
              weight.add(new Integer(0));
              weightBack.add(new Integer(0));
            }
            drawWeight = true;
            repaint();
          }
        }
      }
    }

  }

  boolean move = false;
  //鼠標運動監聽類
  class MouseM
      implements MouseMotionListener {

    public void mouseDragged(MouseEvent e) {
      if (brighter) {
        move = true;
        node.set(currentNodeIndex, new Point(e.getX(), e.getY()));
        repaint();
      }
    }

    public void mouseMoved(MouseEvent e) {

      if (hasPre) {
        //如果已經存在一條邊的開始結點,則得到當前鼠標位置,并畫出開始結點與鼠標位置之間的直線
        currentMousePoint.x = e.getX();
        currentMousePoint.y = e.getY();
        repaint();
      }
      for (int i = 0; i < startNode.size() && i < endNode.size(); i++) {
        int[] p = getPaintPosition( ( (Point) node.get( ( (Integer) startNode.
            get(i)).intValue())).x,
                                   ( (Point) node.get( ( (Integer) startNode.
            get(i)).intValue())).y,
                                   ( (Point) node.get( ( (Integer) endNode.
            get(i)).intValue())).x,
                                   ( (Point) node.get( ( (Integer) endNode.
            get(i)).intValue())).y);
        float k;
        if ( (p[2] - p[0]) != 0) {
          k = ( (float) (p[3] - p[1])) / ( (float) (p[2] - p[0]));
        }
        else {
          k = Integer.MAX_VALUE;
        }
        float b = p[3] - k * p[2];

        int small;
        int large;

        if (p[2] > p[0]) {
          small = p[0];
          large = p[2];
        }
        else {
          small = p[2];
          large = p[0];
        }
        //如果鼠標經過圖中的某一條邊,則高亮顯示該邊及相應權重
        if (k == Integer.MAX_VALUE) {
          if ( (e.getX() >= p[0] - 15) && (e.getX() <= p[0] + 15) &&
              e.getX() >= small && e.getX() <= large) {
            lineBrighter = true;
            paintResult = false;
            currentLineIndex = i;
            repaint();
            break;
          }
        }
        if (e.getY() <= (k * e.getX() + b + 20) &&
            e.getY() >= (k * e.getX() + b - 20) &&
            e.getX() >= small && e.getX() <= large) {
          lineBrighter = true;
          paintResult = false;
          currentLineIndex = i;
          repaint();
          break;
        }
        else {
          lineBrighter = false;
          repaint();
        }
      }
      //如果鼠標經過圖中某一個結點,則高亮顯示該結點及相應結點名
      for (int i = 0; i < node.size(); i++) {
        if (e.getX() >= ( (Point) node.get(i)).x
            && e.getX() <= ( ( (Point) node.get(i)).x + 30)
            && e.getY() >= ( (Point) node.get(i)).y
            && e.getY() <= ( ( (Point) node.get(i)).y + 30)) {
          currentNodeIndex = i;
          brighter = true;
          paintResult = false;
          repaint();
          break;
        }
        else {
          brighter = false;
          repaint();
        }
      }
    }
  }

  public static void main(String[] args) {
    JFrame fram = new JFrame();
    MSTVisual pan = new MSTVisual();

    JMenuBar menuBar = new JMenuBar();
    JMenu fileMenu = new JMenu("文件");
    JMenu helpMenu = new JMenu("幫助");

    JMenuItem exit = new JMenuItem("退出");
    JMenuItem topic = new JMenuItem("主題");
    JMenuItem about = new JMenuItem("關于");
    exit.addActionListener(
        new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        System.exit(1);
      }
    }
    );

    topic.addActionListener(
        new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        try {
          Process process = Runtime.getRuntime().exec(
              "notepad  help.txt");
        }
        catch (IOException e) {
          System.out.println("Open file error!");
        }
      }
    }
    );

    about.addActionListener(
        new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        JOptionPane.showMessageDialog(null,
            "   最小生成樹算法過程演示\n             winpro     ",
            "關于", JOptionPane.INFORMATION_MESSAGE);
      }
    }
    );

    fileMenu.add(exit);
    helpMenu.add(topic);
    helpMenu.add(about);

    menuBar.add(fileMenu);
    menuBar.add(helpMenu);
    fram.setJMenuBar(menuBar);

    Container c = fram.getContentPane();
    c.add(pan);

    fram.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    fram.setSize(800, 600);
    fram.setTitle("最上生成樹算法演示");
    fram.setVisible(true);
  }

  private boolean drawEdge = false;
  private boolean drawNode = false;
  private boolean brighter = false;
  private boolean drawWeight = false;
  private boolean hasPre = false;
  private boolean findEdge = false;
  private boolean findMSTEdge = false;
  private boolean paintResult = false;
  private boolean lineBrighter = false;

  private int currentNodeIndex = 0;
  private int currentLineIndex = 0;
  private int sMSTEdge = 0;
  private int eMSTEdge = 0;
  private int iD = -1;
  private int name = 0;

  private Thread main_thread;

  private LinkedList startNode = new LinkedList();
  private LinkedList endNode = new LinkedList();
  private LinkedList weight = new LinkedList();
  private LinkedList weightBack = new LinkedList();
  private LinkedList nodeName = new LinkedList();
  private LinkedList node = new LinkedList();

  private Vector MST = new Vector();
  private Vector sMSTEdgeV = new Vector();
  private Vector eMSTEdgeV = new Vector();
  private Vector isSelect = new Vector();
  private Vector edge = new Vector();

  private Point preNode = new Point();
  private Point currentNode = new Point();
  private Point currentMousePoint = new Point();

  private JButton process = new JButton("演示算法");

  private MouseL mouse = new MouseL();
  private MouseM mouseM = new MouseM();
  private KeyDown key = new KeyDown();

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美视频你懂的| 欧美日韩视频第一区| 婷婷激情综合网| 中文字幕乱码久久午夜不卡| 717成人午夜免费福利电影| 粗大黑人巨茎大战欧美成人| 蜜桃视频免费观看一区| 亚洲精品中文在线影院| 国产亚洲欧美一级| 欧美久久久一区| 97成人超碰视| 懂色av一区二区三区蜜臀| 日韩高清在线一区| 亚洲乱码国产乱码精品精可以看 | 成人午夜激情视频| 久久精品国产在热久久| 亚洲第一成人在线| 一区二区三区中文字幕在线观看| 久久久久久久久久久久久女国产乱| 欧美人与性动xxxx| 欧美性视频一区二区三区| 成人综合在线观看| 国产精品一级二级三级| 美洲天堂一区二卡三卡四卡视频 | 国产欧美一区二区三区网站| 日韩一区二区三区在线| 欧美日韩高清在线| 欧美性淫爽ww久久久久无| 91香蕉视频污在线| 97se亚洲国产综合在线| 国产精品12区| 国产一区二区三区在线观看免费| 久久99精品久久久久久动态图 | 国产亚洲欧美色| 精品国产乱码久久| 日韩欧美在线影院| 日韩欧美国产wwwww| 3751色影院一区二区三区| 欧美日韩卡一卡二| 欧美三级电影一区| 欧美精品xxxxbbbb| 日韩欧美国产综合一区| 欧美大片在线观看| 久久午夜国产精品| 久久九九久久九九| 国产精品欧美精品| 日韩一区在线播放| 一区二区三区国产精品| 亚洲综合成人网| 日韩成人av影视| 韩国三级在线一区| 国产a精品视频| 99视频热这里只有精品免费| 91网址在线看| 欧美精品色一区二区三区| 欧美一区二区三区思思人| 精品美女一区二区三区| 国产日韩欧美亚洲| 国产精品久久国产精麻豆99网站| 亚洲日本乱码在线观看| 一区二区三区四区激情| 婷婷开心久久网| 久久超碰97中文字幕| 成人激情小说乱人伦| 91麻豆精东视频| 欧美精品v日韩精品v韩国精品v| 精品久久久三级丝袜| 国产精品久久久久久久浪潮网站| 亚洲人妖av一区二区| 无码av免费一区二区三区试看| 久久精品国产一区二区三 | 日韩高清不卡一区二区| 激情久久久久久久久久久久久久久久| 国产麻豆精品95视频| 色婷婷激情综合| 欧美一级黄色片| 国产精品久久午夜夜伦鲁鲁| 婷婷久久综合九色国产成人| 国产成人午夜精品影院观看视频| 色天使色偷偷av一区二区| 日韩欧美你懂的| 亚洲色图视频网| 久久99热这里只有精品| 91毛片在线观看| 欧美一区永久视频免费观看| 亚洲欧洲成人av每日更新| 奇米影视7777精品一区二区| 成人免费观看男女羞羞视频| 欧美人与z0zoxxxx视频| 国产精品国产三级国产三级人妇 | 色噜噜狠狠成人网p站| 精品乱码亚洲一区二区不卡| 一区二区三区在线视频观看| 黄页网站大全一区二区| 欧美日韩综合一区| 中文字幕在线不卡一区二区三区| 青娱乐精品视频| 91福利视频网站| 欧美国产日韩亚洲一区| 美国十次综合导航| 欧美这里有精品| 自拍偷拍国产精品| 国内久久精品视频| 制服丝袜一区二区三区| 日韩理论电影院| 国产风韵犹存在线视精品| 欧美一区二区在线免费观看| 亚洲精品成a人| 不卡的电影网站| 欧美韩国日本不卡| 国产一区二区三区精品欧美日韩一区二区三区 | 一级中文字幕一区二区| 国产乱人伦偷精品视频免下载| 欧美美女bb生活片| 亚洲欧洲综合另类| 国产jizzjizz一区二区| 久久综合丝袜日本网| 免费欧美日韩国产三级电影| 欧美三级电影在线观看| 一区二区三区日韩精品视频| 成人av免费在线观看| 国产亚洲综合在线| 国产一区激情在线| 日韩美一区二区三区| 美国三级日本三级久久99| 欧美一区日本一区韩国一区| 亚洲成va人在线观看| 欧美日韩久久久一区| 亚洲图片欧美色图| 欧美视频一区在线| 亚洲第一av色| 欧美日韩在线综合| 香蕉成人伊视频在线观看| 欧美日韩色一区| 视频一区二区不卡| 欧美精品v国产精品v日韩精品| 香蕉乱码成人久久天堂爱免费| 欧美日韩一区高清| 日韩精品电影一区亚洲| 制服丝袜中文字幕亚洲| 麻豆精品精品国产自在97香蕉| 日韩一级片在线播放| 国内久久婷婷综合| 中文字幕欧美日韩一区| 不卡的电影网站| 亚洲一级片在线观看| 91精品久久久久久久91蜜桃 | 激情六月婷婷久久| 国产拍欧美日韩视频二区| youjizz国产精品| 一区二区在线看| 欧美乱妇一区二区三区不卡视频 | 欧美私模裸体表演在线观看| 亚洲二区在线视频| 日韩午夜中文字幕| 极品少妇xxxx精品少妇偷拍 | 中文字幕永久在线不卡| 色综合久久88色综合天天6| 亚洲成va人在线观看| 久久久亚洲午夜电影| 99国产精品国产精品毛片| 亚洲第一会所有码转帖| 欧美大片在线观看一区二区| 成人av中文字幕| 五月天激情综合| 国产日韩欧美制服另类| 欧美亚洲综合另类| 韩国av一区二区三区四区| 亚洲精品老司机| 精品国产伦一区二区三区观看体验| 成人免费视频免费观看| 亚洲国产另类av| 久久久91精品国产一区二区三区| 91在线免费看| 欧美aⅴ一区二区三区视频| 国产欧美日本一区二区三区| 欧美天堂亚洲电影院在线播放| 国产美女在线精品| 亚洲一区二区不卡免费| 国产欧美一区二区精品婷婷 | 91福利在线免费观看| 精品无码三级在线观看视频| 亚洲免费在线观看视频| 日韩一区二区三区在线| 一本高清dvd不卡在线观看| 韩国中文字幕2020精品| 亚洲一区二三区| 国产精品久久久久一区二区三区 | 亚洲在线视频免费观看| 久久婷婷国产综合国色天香| 色婷婷av一区二区三区软件 | 91精品蜜臀在线一区尤物| av中文字幕不卡| 美女高潮久久久| 亚洲五码中文字幕| 亚洲欧洲国产日韩| 久久精品日产第一区二区三区高清版 | 日韩av中文在线观看| 亚洲欧美电影院| 久久久久久夜精品精品免费|