Tạo đồ thị ngẫu nhiên

Em cần vẽ ra 1 đồ thị ngẫu nhiên chứ không cần nhập thì làm sao ạ?

package BFS_DFS;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Font;
import java.awt.GridLayout;
import java.io.Serializable;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;
import javax.swing.event.AncestorListener;
import javax.swing.event.AncestorEvent;

public class GUI extends JFrame implements ActionListener {

	private final String title = "Chương trình duyệt đồ thị";
	private final String author = "Nhóm 9";
	private final int colTextField = 5;
	private int widthGraphicsPanl = 400;
	private int heightGraphicsPanl = 0;
	private final int maxPoint = 10;

	private GraphicsPanel graphicsPanel;
	private Graph graph;

	private JButton btnCreateGraph, btnAddEdge, btnRun;
	private JRadioButton radBFS, radDFS;
	private JTextField tfNumberPoint, tfBeginPoint, tfEndPoint, tfStartPoint;

	public GUI() {
		setForeground(Color.YELLOW);
		getContentPane().add(createMainPanel());
		setDisplay();
	}

	private void setDisplay() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle(title);
		pack();
		setLocationRelativeTo(null);
		setVisible(true);
	}

	private JPanel createMainPanel() {
		JPanel panel = new JPanel(new BorderLayout());

		panel.add(createTitlePanel(), BorderLayout.PAGE_START);
		panel.add(createControlPanel(), BorderLayout.WEST);
		panel.add(createShowPanel(), BorderLayout.CENTER);
		panel.add(createAuthorPanel(), BorderLayout.PAGE_END);

		graphicsPanel.setPreferredSize(new Dimension(widthGraphicsPanl,
				heightGraphicsPanl));
		return panel;
	}

	private JPanel createTitlePanel() {
		JPanel panel = new JPanel();
		JLabel label = new JLabel(title.toUpperCase());
		label.setForeground(Color.BLUE);
		panel.add(label);
		return panel;
	}

	private JPanel createControlPanel() {

		 //create select panel - select algorithm;
		JPanel selectPanel = new JPanel(new GridLayout(5, 2, 5, 10));
		selectPanel.setBorder(new TitledBorder("Khởi tạo"));
		selectPanel.add(new JLabel("Thuật toán:"));
		selectPanel.add(radBFS = createRadioButton("BFS", true));
		selectPanel.add(new JLabel(""));
		selectPanel.add(radDFS = createRadioButton("DFS", false));
		selectPanel.add(new JLabel("Số điểm:"));
		selectPanel.add(tfNumberPoint = createTextField());
		selectPanel.add(new JLabel(""));
		selectPanel.add(btnCreateGraph = createButton("Nhập"));
		selectPanel.add(btnRun = createButton("Radom"));
		ButtonGroup btnG = new ButtonGroup();
		btnG.add(radBFS);
		btnG.add(radDFS);

		// create edge panel - select algorithm
		JPanel edgePanel = new JPanel(new GridLayout(3, 2, 5, 5));
		edgePanel.setBorder(new TitledBorder("Thêm cạnh"));
		JLabel label = new JLabel("Điểm đầu:");
		edgePanel.add(label);
		edgePanel.add(tfBeginPoint = createTextField());
		edgePanel.add(new JLabel("Điểm cuối"));
		edgePanel.add(tfEndPoint = createTextField());
		edgePanel.add(new JLabel(""));
		edgePanel.add(btnAddEdge = createButton("Thêm"));
		
		
		// create edge panel - select algorithm
		JPanel runPanel = new JPanel(new GridLayout(2, 2, 5, 5));
		runPanel.setBorder(new TitledBorder("Duyệt đồ thị"));
		runPanel.add(new JLabel("Điểm bắt đầu:"));
		runPanel.add(tfStartPoint = createTextField());
		runPanel.add(new JLabel(""));
		runPanel.add(btnRun = createButton("Duyệt"));
	
		JPanel contentPanel = new JPanel(new BorderLayout());
		contentPanel.add(selectPanel, BorderLayout.PAGE_START);
		contentPanel.add(edgePanel, BorderLayout.CENTER);
		contentPanel.add(runPanel, BorderLayout.PAGE_END);
		// contentPanel.setBorder(new LineBorder(Color.blue));

		JPanel panel = new JPanel();
		panel.add(contentPanel);
		panel.setBorder(new LineBorder(Color.CYAN));
		heightGraphicsPanl = (int) contentPanel.getPreferredSize().getHeight();
		return panel;
	}

	private JPanel createShowPanel() {
		JPanel panel = new JPanel(new BorderLayout());
		panel.setBorder(new EmptyBorder(10, 10, 10, 10));
		 panel.add(new JLabel("Đồ thị"), BorderLayout.PAGE_START);
		panel.add(graphicsPanel = new GraphicsPanel());
		return panel;
	}
	
	private JPanel createAuthorPanel() {
		JPanel panel = new JPanel();		
		JLabel label = new JLabel(author.toUpperCase());
		label.setForeground(Color.RED);
		panel.add(label);
		return panel;
	}

	private JButton createButton(String text) {
		JButton btn = new JButton(text);
		btn.addActionListener(this);
		return btn;
	}

	private JRadioButton createRadioButton(String text, boolean select) {
		JRadioButton rad = new JRadioButton(text, select);
		rad.addActionListener(this);
		return rad;
	}

	private JTextField createTextField() {
		JTextField tf = new JTextField(colTextField);
		return tf;
	}

	// ----------------------

	@Override
	
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == btnCreateGraph) {
			createGraph();
			return;
		}
		if (e.getSource() == btnAddEdge) {
			addEdge();
			return;
		}
		if (e.getSource() == btnRun) {
			run();
		}
	}

	private void createGraph() {
		int numberPoint = getValue(tfNumberPoint, maxPoint);
		if (numberPoint > 0) {
			graphicsPanel.setNumberPoint(numberPoint);
			graphicsPanel.start(graphicsPanel.getPreferredSize().width,
					graphicsPanel.getPreferredSize().height);

			graph = new Graph();
			graph.setNumberPoint(numberPoint);
			graph.initValue();
			// disabale(true);
			tfBeginPoint.requestFocus();
		}

	}

	private void addEdge() {
		int max = graphicsPanel.getNumberPoint();
		int indexBeginPoint = getValue(tfBeginPoint, max);
		if (indexBeginPoint > 0) {
			int indexEndPoint = getValue(tfEndPoint, max);
			if (indexEndPoint > 0) {
				indexBeginPoint--;
				indexEndPoint--;
				graphicsPanel.addLine(indexBeginPoint, indexEndPoint);

				graph.getMatrix()[indexBeginPoint][indexEndPoint] = 1;
				graph.getMatrix()[indexEndPoint][indexBeginPoint] = 1;
				tfBeginPoint.setText("");
				tfEndPoint.setText("");
				tfBeginPoint.requestFocus();
			}
		}
	}

	private void run() {
		int startPoint = getValue(tfStartPoint, graphicsPanel.getNumberPoint());
		if (startPoint > 0) {
			startPoint--;
			graph.initVisit();
			graph.initListVisit();
			if (radBFS.isSelected()) {
				graph.BFS(startPoint);
			} else {
				graph.DFS(startPoint);
			}
			setPath();
		}
	}

	private int getValue(JTextField tf, int maxValue) {
		int value = 0;
		try {
			value = Integer.parseInt(tf.getText().toString().trim());
		} catch (Exception e) {
		}
		if (value <= 0 || value > maxValue) {
			JOptionPane.showMessageDialog(null, "Error input", "Error",
					JOptionPane.ERROR_MESSAGE);
			tf.requestFocus();
			return 0;
		}
		return value;
	}

	private void setPath() {
		int numberPointVisit = graph.getListVisit().size();
		graph.showMatrix();
		System.out.println(graph.toStringListPoint(1));

		int numberLine = graphicsPanel.getListLine().size();
		for (int i = 0; i < numberLine; i++) {
			graphicsPanel.getListLine().get(i).setType(0);
			graphicsPanel.getListLine().get(i).setOrder(0);
		}

		int numberPoint = graphicsPanel.getListPoint().size();
		for (int i = 0; i < numberPoint; i++) {
			graphicsPanel.getListPoint().get(i).setType(0);
		}

		for (int i = 0; i < numberPointVisit; i++) {
			int index = graph.getListVisit().get(i);
			if (i == 0) {
				graphicsPanel.getListPoint().get(index).setType(1);
			} else if (i == numberPointVisit - 1) {
				graphicsPanel.getListPoint().get(index).setType(3);
			} else {
				graphicsPanel.getListPoint().get(index).setType(2);
			}
		}

		for (int i = 0; i < numberPointVisit; i++) {
			int index = graph.getListVisit().get(i);

			for (int j = 0; j < numberLine; j++) {
				MyLine line = graphicsPanel.getListLine().get(j);
				if ((line.getIndexP1() == index && line.getIndexP2() == graph.getBack()[index])
						|| (line.getIndexP1() == graph.getBack()[index] && line.getIndexP2() == index)) {
					line.setType(1);
					line.setOrder(i);
					break;
				}
			}
		}
		graphicsPanel.repaint();
	}

	public static void main(String[] args) {
		GUI GiaoDien = new GUI();
	}

}

Thì các thông số thay vì được nhập vào, nó sẽ được tạo ngẫu nhiên thông qua lớp java.util.Random

1 Like

e làm rồi mà khi nó duyệt thì lại sai ạ

a có thể cho e gmail để e gửi bài e nhờ chút đc k ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?