Chuyển danh sách kề sang ma trận kề C++

  • Chuyển danh sách kề sang ma trận kề C++

    14 thg 12, 2021 · Hướng dẫn code nhập xuất ma trận kề từ file bằng c mời các bạn xem chi tiết phần hướng dẫn ngay bên trong bài viết.

    Xem chi tiết »

  • Chuyển danh sách kề sang ma trận kề C++

    Viết chương trình C nhập một ma trận từ file trong C. Giả sử chúng ta có một file matran1.txt chứa ma trận 3x2 (cố định) như sau.

    Xem chi tiết »

  • Chuyển danh sách kề sang ma trận kề C++

    Phân tích đề: Như bạn thấy, ma trận trong file text không hề có kích thước. Vậy một số việc chúng ta cần làm ở bài toán ... Phân tích bài toán · Ma trận đường chéo là gì? · Đọc ma trận từ file trong C++

    Xem chi tiết »

  • Chuyển danh sách kề sang ma trận kề C++

    31 thg 5, 2022 · Note :Bức ảnh bên trên thể hiện rất rõ ràng về chủ đề Hướng dẫn code nhập xuất ma trận kề từ file bằng c – Học 3 …, nội dung bài viết vẫn ...

    Xem chi tiết »

  • Chuyển danh sách kề sang ma trận kề C++

    Các phép toán cơ bản như thêm một cạnh, xóa một cạnh và kiểm tra xem có cạnh nào từ đỉnh i đến đỉnh j hay không là các thao tác hiệu quả về mặt thời gian và ...

    Xem chi tiết »

  • Chuyển danh sách kề sang ma trận kề C++

    chào mọi người, đề bài của em là viết hàm đọc ma trận từ tập tin matrixin và xuất ra tập tin matrixout. Đây là code của em // BT2.cpp : Defines the entry ...

    Xem chi tiết »

  • Chuyển danh sách kề sang ma trận kề C++

    Ví dụ này trình bày cách đọc một ma trận như hình bên dưới từ file txt. image. Và code chương trình như sau: #include #include  ...

    Xem chi tiết »

  • Chuyển danh sách kề sang ma trận kề C++

    15 thg 4, 2011 · . in1 : ma tran ke

    Xem chi tiết »

  • Chuyển danh sách kề sang ma trận kề C++

    25 thg 12, 2009 · int dong,cot; cout<<"nhap>>dong>>cot; nhap.open("input.txt"); for(int i=0;i
    Xem chi tiết »

  • Chuyển danh sách kề sang ma trận kề C++

    Sau đó tạo vòng lặp for với điều kiện dừng là n , sử dụng vòng lặp for này để tiếp tục đọc các giá trị còn lại từ file và lưu chúng vào mảng là xong. Bị thiếu: kề | Phải bao gồm: kề

    Xem chi tiết »

  • Chuyển danh sách kề sang ma trận kề C++

    Thời lượng: 5:35 Đã đăng: 5 thg 6, 2020   VIDEO

    Xem chi tiết »

  • Chuyển danh sách kề sang ma trận kề C++

    9 thg 5, 2020 · Hãy viết chương trình đọc đồ thị từ tập tin và hiển thị ma trận kề của đồ thị này. Giả sử đồ thị được cho là đơn đồ thị vô hướng.

    Xem chi tiết »

  • Chuyển danh sách kề sang ma trận kề C++

    Trong lý thuyết đồ thị, người ta thường dùng ma trận kề để biểu diễn một ... Xây dựng lớp Matrix cài đặt toán tử >> và << (cho việc nhập/xuất ma.

    Xem chi tiết »

  • Admin

    Chuyển danh sách kề sang ma trận kề C++

    Giới tính :

    Chuyển danh sách kề sang ma trận kề C++

    Đến từ : TPHCM

    Ngày Tham gia : 03/04/2011

    Tổng số bài gửi : 2292

    Chuyển đổi các cách biểu diễn đồ thị(ma trận kề -->danh sách kề)

    e "matran.txt" chứa ma trận có trọng số biểu diễn cho đồ thị.."40 1 0 00 0 1 11 0 0 01 0 1 0"yêu cầu viết chương trình đọc file "matran.txt" để chuyển đồ thị sang biểu diễn bằng danh sách kề và ghi ra file "ds.txt""41 12 2 31 02 0 2

    "

    Mình chạy từ 1->n nha, bạn chạy từ 0->n-1 thì sửa lại tí Code: #include#include#define nm 101using namespace std;int n,x;int a[nm][nm];int s[nm];int main(){    freopen("matran.txt","r",stdin);    scanf ("%d",&n);    for (int i=1;i<=n;i++)    {        for (int j=1;j<=n;j++)        {            scanf ("%d",&x);            if (x)            {              s[i]++;              a[i][s[i]]=j;            }        }    }    for (int i=1;i<=n;i++)    {        printf ("%d : ",s[i]);        for (int j=1;j<=s[i];j++)        printf ("%d ",a[i][j]);        printf ("\n");    }    getch();    return 0;

    }


    Việc biểu diễn đồ thị vô hướng được suy ra từ biểu diễn đồ thị có hướng bằng cách coi một cạnh (i; j) trong đồ thị vô hướng là hai cung (i; j) và (j; i) trong đồ thị có hướng. Sau đây trình bày cách biểu diễn đồ thị có hướng G(V,E) trong đó V là tập đỉnh gồm N đỉnh (đánh số từ 0 đến N-1), E là tập cung gồm M cung e(i;j).

    1. Biểu diễn đồ thị bằng ma trận kề: Dùng mảng hai chiều A[N][N]: A[i][j] =1 khi và chỉ khi có cung e(i;j) nối từ đỉnh i tới đỉnh j; A[i][j] =0 khi và chỉ khi không có cung nối từ đỉnh i tới đỉnh j;
    2. Biểu diễn đồ thị bằng danh sách cạnh: Dùng mảng một chiều e[M] gồm M phần tử, mỗi phần tử là một bản cấu trúc có hai trường chính là x và y: e[k].x=i và e[k].y=j khi và chỉ khi đồ thị có cung thứ k là cung (i;j) với 0≤k<
    3. Biểu diễn đồ thị bằng danh sách kề:      Cách cài đặt phổ biến là Forward Star dùng hai mảng adj[M] và head[N]. Mảng adj[M] có các phần tử là số hiệu các đỉnh, mảng này gồm N đoạn, đoạn thứ u lưu số hiệu các đỉnh kề với đỉnh u (cung đi ra từ u), phần tử đầu tiên của đoạn thứ u là phần tử có chỉ số head[u]+1 của mảng adj, phần tử cuối cùng của đoạn thứ u là phần tử có chỉ số head[u+1] của mảng adj. Ngoài ra trong một số trường hợp còn cài đặt danh sách kề bằng Reverse Star : Với mỗi đỉnh v lưu trữ một đoạn trong mảng adj[M] chứa số hiệu các đỉnh nối tới v (cung đi vào v), mà head[v]+1 là chỉ số của phần tử đầu tiên của đoạn này.
    4. Biểu diễn đồ thị bằng danh sách liên thuộc: Dùng hai mảng link[maxM] và head[maxN]. Mỗi đỉnh cho tương ứng một danh sách các cung liên thuộc đi ra từ đỉnh đó. Head[i] là chỉ số cung đầu tiên trong danh sách các cung liên thuộc đi ra từ đỉnh i; nếu từ đỉnh i không có cung nào đi ra thì gán head[i]=0. Còn link[j] là chỉ số cung kế tiếp cung có chỉ số j; link[j]=0 là thể hiện cung có chỉ số j là cung cuối cùng trong các cung liên thuộc đi ra từ đỉnh

    Danh sách kề được sử dụng thuận lợi trong nhiều bài toán, do đó cần biết cách chuyển đổi giữa danh sách kề với ma trận kề hoặc danh sách cạnh.

    Chuyển đổi từ ma trận kề sang danh sách kề:

       int pos = -1;

       for (int i=0; i

            head[i]=pos;

            for (int j=0; j

                fi >> x; // x là A[i][j]

                if (x) { pos++; adj[pos]=j; }

            }

       }

       head[N]=pos;

    Chuyển đổi từ danh sách kề sang ma trận kề:

    for (int i=0; i

    for (int j=0; j

    for (int i=0; i

    for (int j=head[i]+1; j<=head[i+1], j++)  A[i][j]=1;

    Chuyển đổi từ danh sách cạnh sang danh sách kề:

    head[-1]=-1;

    for (int i=0; i

    for (int k=0; k

    for (int i=0; i

    memmove(h, head, sizeof(head));

    for (int k=M-1; k>=0; k–) {

        adj[h[e[k].x]] = e[k].y;

        h[e[k].x]–;

    }

    Chuyển đổi từ danh sách kề sang danh sách cạnh:

    M = -1;

    for (int i=0; i

    for (int pos=head[i]+1; pos<=head[i+1]; pos++){

       j = adj[pos];   M++;

       e[M].x = i; e[M].y = j;

    }

    Chuyển đổi từ danh sách cạnh sang danh sách liên thuộc:

    for (int i=0; i

    for (int j=1; j<=M; j++) {

         link[j] = head[e[j].x];

         head[e[j].x]=j;

    }