Ma Trận Kề [Lý thuyết đồ thị]
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={}, tập U gồm n cạnh và được sắp thứ tự U={}
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=() với:
- B=( = 1 nếu có cạnh nối tới
- B=( = 0 nếu không có cạnh nối tới
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=() = 1 nếu có cạnh nối tới
- A=() = 0 nếu không có cạnh nối tới
Code Ma trận kề
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):
- 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 =>
- 1 và 4 có cạnh nối =>
- 1 và 6 có cạnh nối =>
- 2 và 3 có cạnh nối =>
- 2 và 6 có cạnh nối =>
- 3 và 4 có cạnh nối =>
- 3 và 5 có cạnh nối =>
- 3 và 7 có cạnh nối =>
- 4 và 6 có cạnh nối =>
- 4 và 5 có cạnh nối =>
- 5 và 6 có cạnh nối =>
- Còn lại các cặp đỉnh không có cạnh nối với nhau => = = 0
- Kết quả sau khi biểu diễn đồ thị G sang ma trận kề:
No comments :
Post a Comment