Tài liệu ôn tập, ôn thi. Tài liệu luyện thi

Ma Trận Kề [Lý thuyết đồ thị]

No comments

Ma Trận Kề

Khái niệm
  • Xét đồ thị G=(X, U) (có hướng hay vô hướng)
  • Giả sử tập X gồm n đỉnh và được sắp thứ tự X={x_{{\text{1}}},x_{{\text{2}}},...,x_{{\text{n}}}}, tập U gồm n cạnh và được sắp thứ tự U={u_{{\text{1}}},u_{{\text{2}}},...,u_{{\text{n}}}}

Quy tắc

Ma trận kề của đồ thị G, ký hiệu B(G), là một ma trận nhị phân cấp n x n được định nghĩa như sau: B=(B_{{\text{ij}}}) với:
  • B=(B_{{\text{ij}}} = 1 nếu có cạnh nối x_{{\text{i}}} tới x_{{\text{j}}}
  • B=(B_{{\text{ij}}} = 0 nếu không có cạnh nối x_{{\text{i}}} tới x_{{\text{j}}}
Nếu G là đồ thị vô hướng, ma trận liên thuộc của đồ thị G, ký hiệu A(G), là ma trận nhị phân cấp nxm được định nghĩa như sau: A=(A_{{\text{ij}}})
  • A=(A_{{\text{ij}}}) = 1 nếu có cạnh nối x_{{\text{i}}} tới x_{{\text{j}}}
  • A=(A_{{\text{ij}}}) = 0 nếu không có cạnh nối x_{{\text{i}}} tới x_{{\text{j}}}

Code Ma trận kề


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GraphUtility;

namespace Bai_1
{
    class Program
    {
        //Input
        int[,] a; //ma tran ke
        int n,m; //so dinh,dinh can tim

        public void nhap()
        {
            NumbersFile f = new NumbersFile("MaTranKe.INP");
            f.ReadNumber(out n);
            f.ReadNumber(out m);
            a=new int[n,n];
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    f.ReadNumber(out a[i, j]);

                }
            }
        }
        public void xuat()
        {
            Console.WriteLine(n +" "+ m);
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                    Console.Write(a[i, j]+" ");    
                Console.WriteLine();
            }
        }
        static void Main(string[] args)
        {
            Program g = new Program();
            g.nhap();
            g.xuat();
        }

    }

}


Note: khi sử dụng using GraphUtility; bạn phải tạo class GraphUtility.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.IO;
using System.Text.RegularExpressions;

namespace GraphUtility
{
    class NumbersFile
    {
        StreamReader sr;

        public NumbersFile(string fileName)
        {
            sr = new StreamReader(fileName);
        }


        // Đọc 1 dòng trong file
        public string ReadLine()
        {
            string s;
            s = sr.ReadLine();
            return s;
        }

        // Tách thành các từ
        public string[] ReadWords()
        {
            Regex r = new Regex(@"\s+");
            string[] words;
            string s;

            s = sr.ReadLine();
            words = r.Split(s);

            return words;
        }

        // Đọc 1 số nguyên
        string[] words;
        int index;
        public bool ReadNumber(out int num)
        {
            if (words == null || index == words.Length)
            {
                words = ReadWords();
                index = 0;
            }

            num=0;
            if (int.TryParse(words[index], out num) == false)
                return false;
            index++;

            return true;
        }
    }
}

Cho đồ thị G vô hướng (7 đỉnh):

Đồ thị G
  • Gọi A là ma trận kề biểu diễn đồ thị G.
  • Từ đồ thị G, ta thấy:
    • 1 và 2 có cạnh nối => A_{{\text{12}}}=A_{{\text{21}}}=1
    • 1 và 4 có cạnh nối => A_{{\text{14}}}=A_{{\text{41}}}=1
    • 1 và 6 có cạnh nối => A_{{\text{16}}}=A_{{\text{61}}}=1
    • 2 và 3 có cạnh nối => A_{{\text{23}}}=A_{{\text{32}}}=1
    • 2 và 6 có cạnh nối => A_{{\text{26}}}=A_{{\text{62}}}=1
    • 3 và 4 có cạnh nối => A_{{\text{34}}}=A_{{\text{43}}}=1
    • 3 và 5 có cạnh nối => A_{{\text{35}}}=A_{{\text{53}}}=1
    • 3 và 7 có cạnh nối => A_{{\text{37}}}=A_{{\text{73}}}=1
    • 4 và 6 có cạnh nối => A_{{\text{46}}}=A_{{\text{64}}}=1
    • 4 và 5 có cạnh nối => A_{{\text{45}}}=A_{{\text{54}}}=1
    • 5 và 6 có cạnh nối => A_{{\text{56}}}=A_{{\text{65}}}=1
    • Còn lại các cặp đỉnh không có cạnh nối với nhau => A_{{\text{ij}}} = A_{{\text{ji}}} = 0
  • Kết quả sau khi biểu diễn đồ thị G sang ma trận kề:

Đồ thị G

No comments :

Post a Comment