Y2 – Visual Graph – Minh họa việc biểu diễn đồ thị bằng GDI+ (update version 1.3.3)

Đây là chương trình nhằm mục đích minh họa cho việc biểu diễn và cài đặt các thuật toán liên quan đến đồ thị thông qua thuật toán Floyd. Bạn có thể dùng chuột để vẽ và di chuyển các node của đồ thị, khoảng cách giữa hai node cũng như ma trận kề (adjacency matrix) của đồ thị sẽ được tính toán và tự động thay đổi theo.

Chương trình này cũng là một ví dụ đơn giản về cách vẽ, di chuyển và thay đổi kích thước các control bằng chuột trong quá trình runtime. Các đối tượng trong form hầu hết là control, bạn có thể thay thế hoàn toàn bằng GDI+ nhưng công việc xử lý sẽ tốn kém hơn.

Các công cụ vẽ bao gồm (trong Toolbox):

Tên Phím tắt Công dụng
Move Alt+M, 1 Di chuyển đỉnh
Node Alt+N, 2 Vẽ, di chuyển đỉnh
Edge Alt+E, 3 Vẽ cạnh giữa 2 đỉnh
Eraser Alt+R, 4 Xóa đỉnh, cạnh

Update version 1.3.3 (21/3/2013)

– Cố định tốc độ di chuyển của bóng dẫn đường (bug).

– Cho phép chọn (edge tool), xoá cạnh (eraser tool).

Download src + demo

Update version 1.3.2 (3/5/2011)

– Thêm hiệu ứng di chuyển trên đường đi ngắn nhất giữa 2 đỉnh.

– Thêm công cụ vẽ đồ thị

– Hiển thị đường đi ngắn nhất (gián tiếp) trên ma trận kề.

– Lưu trạng thái của chương trình sau khi thoát.

Download sourcecode+demo

Y2 Visual Graph 1.3.2

Update version 1.2 (29/4/2011)

Thêm chức năng xóa node, edge

– Thay đổi nhỏ trong thuật toán vẽ

– Không cho phép di chuyển node ra ngoài khung nhìn

Download sourcecode+demo

Y2 Visual Graph 1.2

Y2 Visual Graph 1.2

Update version 1.1: (26/4/2011)

– Hỗ trợ đồ thị vô hướng và có hướng

– Một vài thay đổi nhỏ trong thuật toán vẽ

Download sourcecode+demo

Y2 Visual Graph 1.1

Y2 Visual Graph 1.1

Sử dụng:

– Dùng chuột trái để vẽ node và di chuyển, chuột phải để tạo đường đi giữa các node.

Download:

Phiên bản 1.0 (VC# 2010)

59 bình luận về “Y2 – Visual Graph – Minh họa việc biểu diễn đồ thị bằng GDI+ (update version 1.3.3)

  1. Thanks, mình đang làm đề tài có một số thứ cần thiết mình cần dùng tới đồ án này để cải tiến thực hiện cho Project của mình. Mình đã để link tham khảo đến web này. Lần nữa cảm ơn bạn rất nhiều.

    slopesky

  2. Khi chạy chương trình trong Visual 2010 mình bị lỗi sau:
    An unhandled exception of type ‘System.NullReferenceException’ occurred in Y2VisualGraph.exe
    Additional information: Object reference not set to an instance of an object.
    Các bạn nào biết cách khắc phục xin chỉ cho mình với !
    Thanks !

    • Lỗi bạn đưa chung chung quá, bạn có thể chỉ rõ lỗi ở dòng nào, file nào, hoặc post đoạn code lỗi lên đây không. Nếu như có thể debug được thì bạn có thể tự sửa cũng được.

      • Khi mình chạy phiên bản mới nhất của bạn ( version 1.3.2 (3/5/2011) ) trong Visual Studio 2010 thì bị lỗi duy nhất như trên tại dòng:
        protected override void OnLoad(EventArgs e)
        {
        GraphData data= graphUI1.LoadGraph(FILENAME);
        cboFrom.SelectedIndex=data.FormNode;//Lỗi ở đây !!!!!
        cboTo.SelectedIndex=data.ToNode;
        chkUndirectedGrapth.Checked=data.IsUndirectedGraph;
        base.OnShown(e);
        }
        Còn các phiên bản cũ hơn của bạn thì mình đều cho chạy được ngon lành, mình không hiểu tại sao, liệu do mình chưa chỉnh các thông số gì cho Visual Studio hay ko ??

        Mong bạn xem giúp. Chân thành cảm ơn bạn ^^.

  3. Hahaha mình làm được rùi cảm ơn cậu nhiều nhé !
    Blog của bạn rất hữu ích, mong bạn sẽ viết thật nhiều bài nữa để mọi người cùng tham khảo ^ ^

  4. Mình nghĩ bạn nên cho ví dụ về cách lưu dữ liệu trước bởi vì cách in ma trận phụ thuộc vào cách lưu dữ liệu của đồ thị. Hơn nữa thuật toán cũng chỉ cần 2 vòng lặp lồng nhau và bạn có thể dễ dàng viết được nếu như đã học lập trình.

    • Phương thức này dùng 2 tham số của FindShortestPath(x,y), x là index của node bắt đầu tìm và y là node kết thúc. Tức là tìm đường đi ngắn nhất từ x->y (các node được lưu trong một tập hợp).

  5. Để xóa một cạnh bất kỳ bằng cách chỉ con trỏ chuột vào cạnh đó thì mình làm thế nào Yin Yang nhỉ ?
    Cậu có ý tưởng gì về vấn đề này không?!

  6. Cậu cho tớ hỏi một chút ^ ^
    Trong class GraphUI, thì this.Control.Count cho ta biết số đối tượng trong Graph đúng vậy ko cậu?
    Chẳng hạn trong đồ thị tớ đã vẽ 4 nút thi kể thêm cả cái matrix được vẽ kèm nữa là ta có this.Control.Count = 5 đúng ko cậu?

  7. bạn cho mình hỏi, do mình đang tìm hiểu và thấy code của bạn có chỗ GraphUI.cs, MaTran.cs và được xây dựng nằm trong toolbox. Vậy bạn có thể hướng dẫn cụ thể, khi tạo ra nó được không?. Mình cám ơn bạn.

    • Đó là một User Control (bạn nhấn phải project > Add > User Control). Bạn có thể kéo thả, thiết kế trên control này như một cửa sổ Form thông thường. Sau đó kéo build thì nó sẽ xuất hiện trên toolbox.

  8. Cho mình hỏi dữ liệu đầu vào của file data.bin bạn tạo thế nào vậy? Minh muốn sử dụng phần vẽ hiển thị đồ thị của bạn nhưng lại mắc ở khâu đầu vào. Bạn cho thể giải thích cho mình cấu trúc dữ liệu đầu vào trước khi hiển thị được ko? thk u!

  9. vang, ý em là khi mình kéo các node với khoảng các của chúng ra giao diện ,rùi thì làm sao để tên node và giá tri nhập vào qua class Node để minh tính toán đường đi ngắn nhất cho chúng

  10. Yin Yang à! Bạn có thể viết code này trên WEB dạng đơn giản:
    mình có 2 bảng lưu Node và Link.
    sau đó vẽ sơ đồ này trên WEB. Và có các sự kiện (click, drag ..) trên sơ đồ này.
    Bạn có thể hướng dẫn hoặc cho mình từ khóa để mình tìm kiếm cái mã nguồn được ko?

  11. Yin Yang à! Bạn có thể viết code này trên WEB dạng đơn giản:
    mình có 2 bảng lưu Node và Link.
    sau đó vẽ sơ đồ này trên WEB. Và có các sự kiện (click, drag ..) trên sơ đồ này.
    Bạn có thể hướng dẫn hoặc cho mình từ khóa để mình tìm kiếm cái mã nguồn được ko??

  12. mình mở bằng VS2012 thì gặp 2 lỗi thế này.. bạn có thể chỉ mình cách sửa được không
    Message 1 Could not find type ‘Y2VisualGraph.GraphUI’. Please make sure that the assembly that contains this type is referenced. If this type is a part of your development project, make sure that the project has been successfully built using settings for your current platform or Any CPU. 0 0

    Message 2 The variable ‘graphUI1’ is either undeclared or was never assigned. E:\Downloads\Video\dothi\Y2VisualGraph 1.3.3\Y2VisualGraph\Form1.Designer.cs 300 0

Đã đóng bình luận.