Tải bản đầy đủ (.doc) (27 trang)

Báo cáo đồ án trí tuệ nhân tạo : xây dựng chương trình cho phép tìm kiếm đường đi tốt nhất theo giải thuật tìm kiếm Greedy best first search cho Không gian trạng thái bài toán người đưa thư

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (309.73 KB, 27 trang )

Trần Thị Hồng Diệp Tin
học 5A
HỌC VIỆN KỸ THUẬT QUÂN SỰ
KHOA CÔNG NGHỆ THÔNG TIN
-o0o-
ĐỒ ÁN MÔN TRÍ TUỆ NHÂN TẠO
Đề tài: Không gian trạng thái được mô tả là bài toán người
đưa thư. Hãy xây dựng chương trình cho phép tìm kiếm
đường đi tốt nhất theo giải thuật tìm kiếm Greedy best first
search
Thầy giáo hướng dẫn: Ngô Hữu Phúc
Họ và tên: Trần Thị Hồng Diệp
Lớp: Tin học 5A
Thuật toán Tìm Kiếm Greedy best first search (GBFS)
LỜI MỞ ĐẦU

Trí tuệ nhân tạo (Artificial Intelligence) có thể được định nghĩa như một
ngành của khoa học máy tính liên quan đến việc tự động hoá các hành vi thông
minh. AI là một bộ phận của khoa học máy tính và do đó nó phải được đặt trên
những nguyên lý lý thuyết vững chắc, có khả năng ứng dụng được của lĩnh vực
này. Những nguyên lý này bao gồm các cấu trúc dữ liệu dùng cho biểu diễn tri
thức, các thuật toán cần thiết để áp dụng những tri thức đó, cùng các ngôn ngữ và
kĩ thuật lập trình dùng cho việc cài đặt chúng.
Những đặc điểm của trí tuệ nhân tạo:
• Sử dụng máy tính vào suy luận trên các ky hiệu, nhận dạng, học và một số
hình thức suy luận khác.
• Tập trung vào một số vấn đề không thích hợp với các lời giải mang tính
thuật toán. Điều này dựa trên cơ sở tin tường vào phép tìm kiếm heuristic
như một kỹ thuật giải quuyết vấn đề AI.
• Sự quan tâm đến các kỹ thuật giải quyết vấn đề bằng những thông tin
không chính xác, thiếu hụt hoặc được định nghĩa một cách nghèo nàn, và


sự sử dụng các hình thức biểu diễn cho phép người lập trình bù đắp được
những thiếu sót này.
• Suy luận những đặc trưng định tính quan trọng của tình huống.
• Một cố gắng để giải quyết những vướng mắv về ý nghĩa, ngữ nghĩa cũng
như là hình thức cú pháp.
• Những câu trả lời không chính xác cũng như tối ưu, nhưng trong một
chừng mực nào đó được coi là “đủ”. Đây là kết quả của sự tin cậy cốt yếu
vào các phương pháp giái quyết vấn đề theo kiểu heuristic trong những
Trần Thị Hồng Diệp Tin học 5A
Thuật toán Tìm Kiếm Greedy best first search (GBFS)
tình huống mà kết quả tối ưu hoặc chính xác là quá tốn kém hoặc không
thể thực hiện được,
• Sử dụng những khối lượng lớn tri thức chuyên ngành trong giải quyết vấn
đề. Đây là cơ sở cho các hệ chuyên gia.
• Sử dụng các tri thức cấp meta (meta-level knowledge) để tăng thêm sự
tinh vi cho viêc kiểm soát các chiến lược giải quyết vấn đề. Tuy rằng đây
là một vấn đề rất khó khăn, được chú ý trong một số khá ít các ậê thống
gần đây, nó đã nổi bật lên như một lĩnh vực nghiên cứu chủ yếu.
Mục tiêu nghiên cứu của ngành AI:
• Xây dựng lý thuyết về thông minh để giải thích các hoạt động thông minh
• Tìm hiểu cơ chế sự thông minh của con người
- Cơ chế lưu trữ tri thức.
- Cơ chế khai thác tri thức.
• Xây dựng cơ chế hiện thực sự thông minh.
• Áp dụng các hiểu biết này vào các máy móc phục vụ con người.
Trần Thị Hồng Diệp Tin học 5A
Thuật toán Tìm Kiếm Greedy best first search (GBFS)
GIỚI THIỆU GIẢI THUẬT

Giống như hầu hết các ngành khoa học khác, AI cũng được phân thành

những ngành con. Trong khi chia sẻ một tiếp cận giải quyết vấn đề cơ bản, các
ngành con này có các mối quan tâm đến các ứng dụng khác nhau để giải quyết các
bài toán khác nhau.
Nhiều vấn đề bài toán phức tạp đều có dạng "tìm đường đi trong đồ thị" hay nói
một cách hình thức hơn là "xuất phát từ một đỉnh của một đồ thị, tìm đường đi hiệu
quả nhất đến một đỉnh nào đó". Một phát biểu khác thường gặp của dạng bài toán
này là:
Cho trước hai trạng thái T
0
và TG hãy xây dựng chuỗi trạng thái T
0
, T
1
, T
2
, , Tn
-1
,
Tn = TG sao cho:
thỏa mãn một điều kiện cho trước (thường là nhỏ nhất).
Trong đó, Ti thuộc tập hợp S (gọi là không gian trạng thái – state space) bao gồm
tất cả các trạng thái có thể có của bài toán và cost(T
i-1
, T
i
) là chi phí để biến đổi từ
trạng thái Ti
-1
sang trạng thái Ti. Dĩ nhiên, từ một trạng thái Ti ta có nhiều cách để
biến đổi sang trạng thái Ti

+1
. Khi nói đến một biến đổi cụ thể từ Ti
-1
sang Ti ta sẽ
dùng thuật ngữ hướng đi (với ngụ ý nói về sự lựa chọn).
Hình: Mô hình chung của các vấn đề-bài toán phải giải quyết bằng phương pháp tìm kiếm lời
giải. Không gian tìm kiếm là một tập hợp trạng thái - tập các nút của đồ thị. Chi phí cần thiết để
Trần Thị Hồng Diệp Tin học 5A
Thuật toán Tìm Kiếm Greedy best first search (GBFS)
chuyển từ trạng thái T này sang trạng thái Tk

được biểu diễn dưới dạng các con số nằm trên cung
nối giữa hai nút tượng trưng cho hai trạng thái.
Đa số các bài toán thuộc dạng mà chúng ta đang mô tả đều có thể được biểu diễn
dưới dạng đồ thị. Trong đó, một trạng thái là một đỉnh của đồ thị. Tập hợp S bao
gồm tất cả các trạng thái chính là tập hợp bao gồm tất cả đỉnh của đồ thị. Việc biến
đổi từ trạng thái Ti
-1
sang trạng thái Ti là việc đi từ đỉnh đại diện cho Ti
-1
sang đỉnh
đại diện cho Ti

theo cung nối giữa hai đỉnh này.
Bài toán:
Hãy tìm một hành trình cho một người đưa thư đi qua n điểm khác nhau, mỗi điểm
đi qua một lần và trở về điểm xuất phát sao cho tổng chiều dài đoạn đường cần đi
là ngắn nhất. Giả sử rằng có con đường nối trực tiếp từ giữa hai điểm bất kỳ.
Tất nhiên ta có thể giải bài toán này bằng cách liệt kê tất cả con đường có thể đi,
tính chiều dài của mỗi con đường đó rồi tìm con đường có chiều dài ngắn nhất.

Tuy nhiên, cách giải này lại có độ phức tạp 0(n!) (một hành trình là một hoán vị
của n điểm, do đó, tổng số hành trình là số lượng hoán vị của một tập n phần tử là
n!). Do đó, khi số đại lý tăng thì số con đường phải xét sẽ tăng lên rất nhanh.
Một cách giải đơn giản hơn nhiều và thường cho kết quả tương đối tốt là dùng một
thuật giải Heuristic ứng dụng nguyên lý Greedy.
Tư tưởng của giải thuật Greedy best first search (GBFS) như sau:
Trong khoa học máy tính, Greedy best first search (GBFS) là 1 thuật toán tìm
kiếm trong đồ thị. Thuật toán này tìm một đường đi từ 1 nút khởi đầu tới 1 nút cho
trước (hoặc tới 1 nút thỏa mãn 1 điều kiện đích). Thuật toán này sử dụng 1 đánh
giá f(n)=h(n) (heuristic) để xếp loại từng nút theo ước lượng về tuyến đường tốt
nhất đi qua nút đó. Thuật toán này duyệt các nút theo thứ tự của đánh giá heurristic
này. Khác với phương pháp tìm kiếm tốt nhất đầu tiên, phương pháp này sử dụng
hàm đánh giá đến trạng thái đích. GBFS chọn node được cho là gần với node đích
để phát triển.
Từ điểm khởi đầu, ta liệt kê tất cả quãng đường từ điểm xuất phát cho đến n
đại lý rồi chọn đi theo con đường ngắn nhất.
Khi đã đi đến một đại lý, chọn đi đến đại lý kế tiếp cũng theo nguyên tắc
trên. Nghĩa là liệt kê tất cả con đường từ đại lý ta đang đứng đến những đại
lý chưa đi đến. Chọn con đường ngắn nhất. Lặp lại quá trình này cho đến lúc
không còn đại lý nào để đi.
Trần Thị Hồng Diệp Tin học 5A
Thuật toán Tìm Kiếm Greedy best first search (GBFS)
Bạn có thể quan sát hình sau để thấy được quá trình chọn lựa. Theo nguyên lý
Greedy, ta lấy tiêu chuẩn hành trình ngắn nhất của bài toán làm tiêu chuẩn cho
chọn lựa cục bộ. Ta hy vọng rằng, khi đi trên n đoạn đường ngắn nhất thì cuối
cùng ta sẽ có một hành trình ngắn nhất. Điều này không phải lúc nào cũng đúng.
Với điều kiện trong hình tiếp theo thì thuật giải cho chúng ta một hành trình có
chiều dài là 14 trong khi hành trình tối ưu là 13. Kết quả của thuật giải Heuristic
trong trường hợp này chỉ lệch 1 đơn vị so với kết quả tối ưu. Trong khi đó, độ phức
tạp của thuật giải Heuristic này chỉ là 0(n

2
).
Hình: Giải bài toán sử dụng nguyên lý Greedy
Trần Thị Hồng Diệp Tin học 5A
Thuật toán Tìm Kiếm Greedy best first search (GBFS)
Nguyên lý tham lam (Greedy): Lấy tiêu chuẩn tối ưu (trên phạm vi toàn cục) của
bài toán để làm tiêu chuẩn chọn lựa hành động cho phạm vi cục bộ của từng bước
(hay từng giai đoạn) trong quá trình tìm kiếm lời giải.
Nguyên lý thứ tự: Thực hiện hành động dựa trên một cấu trúc thứ tự hợp lý của
không gian khảo sát nhằm nhanh chóng đạt được một lời giải tốt.
Đánh giá Greedy best first search (GBFS)
Đủ? Không – Có thể vào vòng lặp quẩn.
Độ phức tạp thời gian? O(bm), Nếu hàm heuristic xấp xỉ tốt trong thực tế thì thời
gian chạy sẽ giảm đi rất nhiều
Độ phức tạp không gian? O(bm) – Lưu trữ tất cả các Nodes.
Tối ưu? Không.
Trần Thị Hồng Diệp Tin học 5A
Thuật toán Tìm Kiếm Greedy best first search (GBFS)
GIỚI THIỆU CHƯƠNG TRÌNH
 
Chương trình DEMO
1. Giao diện:
Form Nhập gồm 3 phần chính:
• Khu vực vẽ các nút
• Kết quả tìm kiếm
• Các nút chức năng: Thêm nhà, Tạo mới, Thêm giá.
Khi bắt đầu chương trình, ta chọn nút Tạo mới để tạo số nút theo yêu cầu người
kiểm tra và nhập giá cho đoạn đường giữa các thành phố. Kết quả thu được như
form sau:
Trần Thị Hồng Diệp Tin học 5A

Thuật toán Tìm Kiếm Greedy best first search (GBFS)
Form Giải gồm 3 phần chính:
• Khu vực vẽ các nút
• Kết quả tìm kiếm
• Các nút chức năng: Điểm đầu, Giải, Giải từng bước
Trần Thị Hồng Diệp Tin học 5A
Thuật toán Tìm Kiếm Greedy best first search (GBFS)
2. Giới thiệu chương trình:
// Hàm hiển thị
private void hienthi()
{
// Hiển thị nhà:
dt = new dothi("dt1.txt");

for (int i = 0; i < dt.Sonha; i++)
{
this.Controls.Add(dt.Nha[i]);
}
//Hiên thị giá đường dưới dạng textbox
diem = new Point[dt.Sonha];
for (int i = 0; i < dt.Sonha; i++)
{
Trần Thị Hồng Diệp Tin học 5A
Thuật toán Tìm Kiếm Greedy best first search (GBFS)
diem[i] = new Point(dt.Nha[i].Location.X + dt.Nha[i].Height /
2, dt.Nha[i].Location.Y + dt.Nha[i].Width / 2);
}
tb = new TextBox[dt.Sonha, dt.Sonha];
for (int i = 0; i < dt.Sonha; i++)
{

for (int j = 0; j < dt.Sonha; j++)
{
tb[i, j] = new TextBox();
tb[i, j].Text = "0";
}
}
for (int i = 0; i < dt.Sonha; i++)
{
for (int j = i + 1; j < dt.Sonha; j++)
{
tb[i, j].Size = new Size(23, 18);
tb[i, j].Text = dt.Mangcost[i, j].ToString();
tb[i, j].Location = new Point((diem[i].X + diem[j].X) / 2,
(diem[i].Y + diem[j].Y) / 2);
this.Controls.Add(tb[i, j]);
}
}
}
// Hàm xóa hiển thị
private void xoahienthi()
Trần Thị Hồng Diệp Tin học 5A
Thuật toán Tìm Kiếm Greedy best first search (GBFS)
{
foreach (TextBox tbs in this.tb)
{
this.Controls.Remove(tbs);
}
foreach (nha n in dt.Nha)
{
this.Controls.Remove(n);

}
}
// Hàm lưu nhà
private void luunha(int x, int y)
{
StreamReader sr = new StreamReader("dt1.txt");
string sonutcu = sr.ReadLine();
int sonutmoi = Convert.ToInt32(sonutcu) + 1;
string temp = sr.ReadToEnd();
sr.Close();
StreamWriter sw = new StreamWriter("dt1.txt");
sw.WriteLine(sonutmoi);
sw.WriteLine(temp);
string toado = x.ToString() + "," + y.ToString();
sw.Write(toado);
sw.Close();
}
//Hàm xóa dữ liệu
Trần Thị Hồng Diệp Tin học 5A
Thuật toán Tìm Kiếm Greedy best first search (GBFS)
private void xoadulieu()
{
StreamWriter sw1 = new StreamWriter("dt1.txt");
sw1.Write("");
sw1.Close();
StreamWriter sw2 = new StreamWriter("dt2.txt");
sw2.Write("");
sw2.Close();
}
// Hàm lưu giá

private void luugia()
{
for (int i = 0; i < dt.Sonha; i++)
{
for (int j = i+1; j < dt.Sonha; j++)
{
tb[j, i].Text = tb[i, j].Text;
}

}
StreamWriter sw = new StreamWriter("dt2.txt");
string temp = null;
for (int i = 0; i < dt.Sonha; i++)
{
for (int j = 0; j < dt.Sonha; j++)
{
Trần Thị Hồng Diệp Tin học 5A
Thuật toán Tìm Kiếm Greedy best first search (GBFS)
temp = temp + tb[i, j].Text + " | ";
}
temp = temp + "\r\n";
}
sw.WriteLine(temp);
sw.Close();
}
// Hàm lưu giá sau khi thêm nhà
private void luugiasauthemnha()
{
string temp = null;
if (dt.Sonha == 0)

{
StreamWriter sw = new StreamWriter("dt2.txt");
temp = "00 |";
sw.WriteLine(temp);
sw.Close();
}
else
{
StreamReader sr = new StreamReader("dt2.txt");
string[] dauvao = new string[dt.Sonha - 1];
for (int i = 0; i < dt.Sonha - 1; i++)
{
dauvao[i] = sr.ReadLine();
}
sr.Close();
Trần Thị Hồng Diệp Tin học 5A
Thuật toán Tìm Kiếm Greedy best first search (GBFS)
StreamWriter sw = new StreamWriter("dt2.txt");
for (int i = 0; i < dt.Sonha - 1; i++)
{
temp = temp + dauvao[i] + " | 00 |";
temp = temp + "\r\n";
}
for (int i = 0; i < dt.Sonha; i++)
{ temp = temp + "00 | "; }
sw.WriteLine(temp);
sw.Close();
}
}
private void themtb()

{
tb = new TextBox[dt.Sonha, dt.Sonha];
for (int i = 0; i < dt.Sonha; i++)
{
for (int j = 0; j < dt.Sonha; j++)
{
tb[i, j] = new TextBox();
tb[i, j].Text = "0";
}
}
Trần Thị Hồng Diệp Tin học 5A
Thuật toán Tìm Kiếm Greedy best first search (GBFS)
for (int i = 0; i < dt.Sonha; i++)
{
for (int j = i + 1; j < dt.Sonha; j++)
{
tb[i, j].Size = new Size(23, 18);
tb[i, j].Text = dt.Mangcost[i, j].ToString();
tb[i, j].Location = new Point((diem[i].X + diem[j].X) / 2,
(diem[i].Y + diem[j].Y) / 2);
this.Controls.Add(tb[i, j]);
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
hienthi();
}
private void Form1_Paint(object sender, PaintEventArgs e)
{

Graphics dohoa = this.CreateGraphics();
Pen to = new Pen(Color.Red, 2);

for (int i = 0; i < dt.Sonha; i++)
{
for (int j = i + 1; j < dt.Sonha; j++)
{
dohoa.DrawLine(to,diem[i],diem[j]);
}
}
Trần Thị Hồng Diệp Tin học 5A
Thuật toán Tìm Kiếm Greedy best first search (GBFS)
}
private void button1_Click(object sender, EventArgs e)
{
luugia();
}
// Hàm lưu tọa độ nhà
private void readcost(string _patch, string _patch_cost)
{
StreamReader sr = new StreamReader(_patch);
_sonha = Convert.ToInt16(sr.ReadLine());
_mangcost = new int[_sonha, _sonha];
_nha = new nha[_sonha];

string tuvao;
string[] mangkytu = null;
string[] tungancach = { " | " };
string[] daungan = { "," };
sr.ReadLine();

for (int i = 0; i < _sonha; i++)
{
tuvao = sr.ReadLine().ToString();
mangkytu = null;
mangkytu = tuvao.Split(daungan,
StringSplitOptions.RemoveEmptyEntries);
_nha[i] = new nha(i);
_nha[i].Location = new Point(Convert.ToInt16(mangkytu[0]) -
_nha[i].Height / 2, Convert.ToInt16(mangkytu[1]) - _nha[i].Width / 2);
Trần Thị Hồng Diệp Tin học 5A
Thuật toán Tìm Kiếm Greedy best first search (GBFS)
}
sr.Close();
StreamReader sr2 = new StreamReader(_patch_cost);
for (int i = 0; i < _sonha; i++)
{
tuvao = sr2.ReadLine().ToString();
mangkytu = null;
mangkytu = tuvao.Split(tungancach,
StringSplitOptions.RemoveEmptyEntries);
for (int j = 0; j < _sonha; j++)
{
_mangcost[i, j] = Convert.ToInt16(mangkytu[j]);
}
}
sr2.Close();
}
private void readcost(string _patch)
{
StreamReader sr = new StreamReader(_patch);

_sonha = Convert.ToInt16(sr.ReadLine());
_mangcost = new int[_sonha, _sonha];
_nha = new nha[_sonha];

string tuvao;
string[] mangkytu = null;
string[] tungancach = { " | " };
string[] daungan = { "," };
Trần Thị Hồng Diệp Tin học 5A
Thuật toán Tìm Kiếm Greedy best first search (GBFS)
sr.ReadLine();
for (int i = 0; i < _sonha; i++)
{
tuvao = sr.ReadLine().ToString();
mangkytu = null;
mangkytu = tuvao.Split(daungan,
StringSplitOptions.RemoveEmptyEntries);
_nha[i] = new nha(i);
_nha[i].Location = new Point(Convert.ToInt16(mangkytu[0]) -
_nha[i].Height / 2, Convert.ToInt16(mangkytu[1]) - _nha[i].Width / 2);
}
sr.Close();

}
}
}
// Hàm Nhập
private void nhậpToolStripMenuItem_Click(object sender, EventArgs e)
{
foreach (Form frm in this.MdiChildren)

{
frm.Close();
}
Form_nhap fe = new Form_nhap();
fe.MdiParent = this;
fe.Show();
Trần Thị Hồng Diệp Tin học 5A
Thuật toán Tìm Kiếm Greedy best first search (GBFS)
nhap.Enabled = false;
giai.Enabled = true;
}
// Hàm Giải
private void giảiToolStripMenuItem_Click(object sender, EventArgs e)
{
foreach (Form frm in this.MdiChildren)
{
frm.Close();
}
Form_giai fr = new Form_giai();
fr.MdiParent = this;
fr.Show();
nhap.Enabled = true;
giai.Enabled = false;
}
}
}
//
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (checkBox1.Checked)

{
xoahienthi();
luunha(e.X, e.Y);
Trần Thị Hồng Diệp Tin học 5A
Thuật toán Tìm Kiếm Greedy best first search (GBFS)
dt = new dothi("dt1.txt");
hienthi();
this.Refresh();
}
}
private void button2_Click(object sender, EventArgs e)
{
xoahienthi();
xoadulieu();
dt = new dothi();
checkBox1.Checked = true;
hienthi();
this.Refresh();
}

}
}
// Hàm hiển thị
private void hienthi()
{
// Hiển thị nhà:
dt = new dothi("dt1.txt","dt2.txt");
for (int i = 0; i < dt.Sonha; i++)
{
this.Controls.Add(dt.Nha[i]);

}
//Hiên thị giá đường dưới dạng textbox
Trần Thị Hồng Diệp Tin học 5A
Thuật toán Tìm Kiếm Greedy best first search (GBFS)
diem = new Point[dt.Sonha];
for (int i = 0; i < dt.Sonha; i++)
{
diem[i] = new Point(dt.Nha[i].Location.X + dt.Nha[i].Height /
2, dt.Nha[i].Location.Y + dt.Nha[i].Width / 2);
}
tb = new TextBox[dt.Sonha, dt.Sonha];
for (int i = 0; i < dt.Sonha; i++)
{
for (int j = 0; j < dt.Sonha; j++)
{
tb[i, j] = new TextBox();
tb[i, j].Text = "0";
}
}
for (int i = 0; i < dt.Sonha; i++)
{
for (int j = i + 1; j < dt.Sonha; j++)
{
tb[i, j].Size = new Size(23, 18);
tb[i, j].Text = dt.Mangcost[i, j].ToString();
tb[i, j].Location = new Point((diem[i].X + diem[j].X) / 2,
(diem[i].Y + diem[j].Y) / 2);
this.Controls.Add(tb[i, j]);
}
}

}
Trần Thị Hồng Diệp Tin học 5A
Thuật toán Tìm Kiếm Greedy best first search (GBFS)


private void button1_Click_1(object sender, EventArgs e)
{
dothi dt = new dothi("dt1.txt", "dt2.txt");
greedy gr = new greedy(dt);
if (textBox1.Text == "")
gr.tinhtoan(0);
else
gr.tinhtoan(Convert.ToInt16(textBox1.Text));
Graphics dohoa = this.CreateGraphics();
Pen to = new Pen(Color.Blue, 4);
for (int i = 0; i < dt.Sonha - 1; i++)
{
dohoa.DrawLine(to, diem[gr.KQ[i]], diem[gr.KQ[i + 1]]);
}
}
private void button2_Click(object sender, EventArgs e)
{
dothi dt = new dothi("dt1.txt", "dt2.txt");
greedy gr = new greedy(dt);
if (textBox1.Text == "")
gr.tinhtoan(0);
else
Trần Thị Hồng Diệp Tin học 5A
Thuật toán Tìm Kiếm Greedy best first search (GBFS)
gr.tinhtoan(Convert.ToInt16(textBox1.Text));

Graphics dohoa = this.CreateGraphics();
Pen to = new Pen(Color.Blue, 4);
for (int i = 0; i < dt.Sonha - 1; i++)
{
int biendem = DateTime.Now.Second;
next:
if ((DateTime.Now.Second - biendem) >= 2)
dohoa.DrawLine(to, diem[gr.KQ[i]], diem[gr.KQ[i + 1]]);
else
goto next;
}
}
private void Form_giai_Paint(object sender, PaintEventArgs e)
{
Graphics dohoa1 = this.CreateGraphics();
Pen to = new Pen(Color.Red, 2);
for (int i = 0; i < dt.Sonha; i++)
{
for (int j = i + 1; j < dt.Sonha; j++)
{
dohoa1.DrawLine(to, diem[i], diem[j]);
}
}
}
Trần Thị Hồng Diệp Tin học 5A
Thuật toán Tìm Kiếm Greedy best first search (GBFS)
}
}
// Hàm xử lý thuật toán Greedy
public greedy()

{
_dt = new dothi();
_ketqua = new int[_dt.Sonha];
for (int i = 0; i < _dt.Sonha; i++)
{
_ketqua[i] = -1;
}
}
public greedy(dothi dt)
{
_dt = dt;
_ketqua = new int[_dt.Sonha];
for (int i = 0; i < _dt.Sonha; i++)
{
_ketqua[i] = -1;
}
}
// Hàm tính toán
public void tinhtoan(int dauvao)
{
_ketqua[0] = dauvao;
int min = 9999;
Trần Thị Hồng Diệp Tin học 5A

×