<< Chapter < Page Chapter >> Page >

OPEN  {}

CLOSE  {(Arad,g 0,h’ 0,f’ 0)}

Từ Arad có thể đi đến được 3 thành phố là Sibiu, Timisoara và Zerind. Ta lần lượt tính giá trị f’, g và h’ của 3 thành phố này. Do cả 3 nút mới tạo ra này chưa có nút cha nên ban đầu nút cha của chúng đều là Arad.

h’(Sibiu)  253

g(Sibiu)  g(Arad)+cost(Arad,Sibiu)

 0+140 140

f’(Sibiu)  g(Sibiu)+h’(Sibiu)

 140+253  393

Cha(Sibiu)  Arad

h’(Timisoara)  329

g(Timisoara)  g(Arad)+cost(Arad, Timisoara)

 0+118 118

f’(Timisoara)  g(Timisoara)+ h’(Timisoara)

 118+329  447

Cha(Timisoara)  Arad

h’(Zerind)  374

g(Zerind)  g(Arad)+cost(Arad, Zerind)

 0+75 75

f’(Zerind)  g(Zerind)+h’(Zerind)

 75+374  449

Cha(Zerind)  Arad

Do cả 3 nút Sibiu, Timisoara, Zerind đều không có trong cả OPEN và CLOSE nên ta bổ sung 3 nút này vào OPEN.

OPEN  {(Sibiu,g 140,h’ 253,f’ 393,Cha Arad)

(Timisoara,g 118,h’ 329,f’ 447,Cha Arad)

(Zerind,g 75,h’ 374,f’ 449,Cha Arad)}

CLOSE  {(Arad,g 0,h’ 0,f’ 0)}

Hình : Bước 1, nút được đóng ngoặc vuông (như [Arad]) là nút trong tập CLOSE, ngược lại là trong tập OPEN.

Trong tập OPEN, nút Sibiu là nút có giá trị f’ nhỏ nhất nên ta sẽ chọn Tmax  Sibiu. Ta lấy Sibiu ra khỏi OPEN và đưa vào CLOSE.

OPEN  {(Timisoara,g 118,h’ 329,f’ 447,Cha Arad)

(Zerind,g 75,h’ 374,f’ 449,Cha Arad)}

CLOSE  {(Arad,g 0,h’ 0,f’ 0)

(Sibiu,g 140,h’ 253,f’ 393,Cha Arad)}

Từ Sibiu có thể đi đến được 4 thành phố là : Arad, Fagaras, Oradea, Rimnicu. Ta lần lượt tính các giá trị g, h’, f’ cho các nút này.

h’(Arad)  366

g(Arad)  g(Sibiu)+cost(Sibiu,Arad)

 140+140 280

f’(Arad)  g(Arad)+h’(Arad)

 280+366  646

h’(Fagaras)  178

g(Fagaras)  g(Sibiu)+cost(Sibiu, Fagaras)  140+99 239

f’(Fagaras)  g(Fagaras)+ h’(Fagaras)

 239+178 417

h’(Oradea)  380

g(Oradea)  g(Sibiu)+cost(Sibiu, Oradea)

 140+151  291

f’(Oradea)  g(Oradea)+ h’(Oradea)

 291+380  671

h’(R.Vilcea)  193

g(R.Vilcea)  g(Sibiu)+cost(Sibiu, R.Vilcea)

 140+80  220

f’(R.Vilcea)  g(R.Vilcea)+ h’(R.Vilcea)

 220+193  413

Nút Arad đã có trong CLOSE. Tuy nhiên, do g(Arad) mới được tạo ra (có giá trị 280) lớn hơn g(Arad) lưu trong CLOSE (có giá trị 0) nên ta sẽ không cập nhật lại giá trị g và f’ của Arad lưu trong CLOSE. 3 nút còn lại : Fagaras, Oradea, Rimnicu đều không có trong cả OPEN và CLOSE nên ta sẽ đưa 3 nút này vào OPEN, đặt cha của chúng là Sibiu. Như vậy, đến bước này OPEN đã chứa tổng cộng 5 thành phố.

OPEN  {(Timisoara,g 118,h’ 329,f’ 447,Cha Arad)

(Zerind,g 75,h’ 374,f’ 449,Cha Arad)

(Fagaras,g 239,h’ 178,f’ 417,Cha Sibiu)

(Oradea,g 291,h’ 380,f’ 617,Cha Sibiu)

(R.Vilcea,g 220,h’ 193,f’ 413,Cha Sibiu)}

CLOSE  {(Arad,g 0,h’ 0,f’ 0)

(Sibiu,g 140,h’ 253,f’ 393,Cha Arad)}

Trong tập OPEN, nút R.Vilcea là nút có giá trị f’ nhỏ nhất. Ta chọn Tmax  R.Vilcea. Chuyển R.Vilcea từ OPEN sang CLOSE. Từ R.Vilcea có thể đi đến được 3 thành phố là Craiova, Pitesti và Sibiu. Ta lần lượt tính giá trị f’, g và h’ của 3 thành phố này.

h’(Sibiu)  253

g(Sibiu)  g(R.Vilcea)+ cost(R.Vilcea,Sibiu)

 220+80 300

f’(Sibiu)  g(Sibiu)+h’(Sibiu)

 300+253  553

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Lập trình và ngôn ngữ lập trình. OpenStax CNX. Aug 06, 2009 Download for free at http://cnx.org/content/col10886/1.1
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Lập trình và ngôn ngữ lập trình' conversation and receive update notifications?

Ask