Recent Posts

Code C/C++: Thuật toán Dijkstra tìm đường đi ngắn nhất

-
Mô tả bài toán: cho đồ thị vô hướng G=(V,E) hãy xác định đường đi ngắn nhất từ đỉnh D tới đỉnh C của đồ thị G.
Ý tưởng thuật toán: sử dụng thuật toán Dijkstra.
Mô tả dữ liệu đầu vào và đầu ra của bài toán:
Dữ liệu vào: đồ thị đã liên thông và cho trong tập tin Bai6.inp. 
-  Dòng đầu ghi số n là số đỉnh của một đồ thị (0<n<100)
-  Dòng thứ hai lưu đỉnh D và đỉnh C.
-  Dòng i+2 (1<=i<=n) chứa n số A[i,1], A[i,2],…, A[i,n] mỗi số cách nhau bởi một khoảng trắng.
Dữ liệu ra: xuất ra màn hình  đường đi ngắn nhất từ đỉnh D đến C và giá trị đường đi ngắn nhẩt tìm được.
Ví dụ:
Cài đặt chương trình:
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <values.h>
#define max 100
#define FileIn "Bai6.inp"
void Doc_File(int A[max][max], int &n, int &D, int &C) {
FILE*f = fopen(FileIn,"rb");
fscanf(f,"%d%d%d",&n,&D,&C);
cout<<"Ma Tran Lien Ket Tuong Ung.\n";
cout<<D<<" "<<C<<endl;
for(int i =0;i<n;i++) {
for(int j =0;j<n;j++) {
fscanf(f,"%d",&A[i][j]);
cout<<A[i][j]<<" ";
}
cout<<endl; 
}
fclose(f);
D--; C--;
}
void Dijkstra(int A[max][max], int n, int D, int C) {
char DanhDau[max];
int Nhan[max], Truoc[max], XP, min;
for(int i=0; i<n; i++){
Nhan[i] = MAXINT;
DanhDau[i] = 0;
Truoc[i] = D;
}
Nhan[D] = 0;
DanhDau[D] = 1;
XP = D;
while(XP != C){
for(int j=0; j<n; j++)
if(A[XP][j]>0 && Nhan[j]>A[XP][j]+Nhan[XP] && DanhDau[j]==0) {
Nhan[j] = A[XP][j]+Nhan[XP];
Truoc[j] = XP;
}
min = MAXINT;
for(j = 0; j<n; j++)
if(min>Nhan[j]&& DanhDau[j]==0){
min = Nhan[j];
XP = j;
}
DanhDau[XP] = 1;
}
cout<<"Duong Di Ngan Nhat La:"<<Nhan[C]<<endl;
cout<<C+1<<" <-"<<Truoc[C]+1;
i = Truoc[C];
while(i!=D){
i = Truoc[i];
cout<<" <-"<<i+1;
}
}
void main() {
int A[max][max],n,Dau,Cuoi;



Doc_File(A,n,Dau,Cuoi);
Dijkstra(A,n,Dau,Cuoi);
getch();


Kết quả chạy chương trình:

Tags: kỹ thuật lập trình, c, c++, toán rời rạc, đồ thị, tìm đường đi, Dijkstra.

Related Post:

  • My Location Read More
  • Bài 2 - Internal Storage - Lưu vào bộ nhớ trong      Bạn có thể lưu trữ một file trực tiếp vào bộ nhớ trong của ứng dụng. Và tất nhiên một khi file đã được lưu trữ vào bộ nhớ trong thì chỉ có ứng dụng của bạn mới có thể truy xuất được. Và chỉ khi nào bạn xóa ứng dụng thì file đó sẽ bị xóa đi.Internal Storage thường được dùng khi bạn muốn lưu thông tin vào một file vào bộ nhớ trong của Devi… Read More
  • Call - Email - SMS Trong AndroidĐể gọi điện, gửi SMS đến một số nào đó trong ứng dụng của bạn thì bạn phải cần làm các bước như sau (SOURCE CODE):Bước 1: Vào file manifest mở quyền cho phép ứng dụng của bạn có thể Call, SMS <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.SEND_SMS" /> Bước 2: Viết code để Call public … Read More
  • Đọc RSS Trong Android        Đọc RSS bằng Android là một ứng dụng khá phổ biến, nó giúp cho người đọc tin có thể đọc được những nội dung mình yêu thích một cách tập chung.Nhằm đáp ứng nhu cầu đó nhóm Laptrinhandroid.info đã tạo thành một ứng dụng RSS trong android cơ bản sau:Đường dẫn Download source code: TẠI ĐÂY (Các bạn chú ý khi download sẽ gọi ra m… Read More
  • Bài 3 - External Storage - Bộ nhớ ngoài      Mọi thiết bị Android hầu như đều hỗ trợ bộ nhớ ngoài cụ thể là SD Card vì vậy chúng ta hoàn toàn có thể lưu trữ file hay truy xuất vào bộ nhớ đó.      Bộ nhớ ngoài thường dùng trong các ứng dụng Media như Zing, Nhac của tôi.... Nói chung các ứng dụng liên quan đến việc lưu trữ file. Vì bộ nhớ trong thì giới hạn còn bộ nhớ … Read More
  • Viết chương trình gửi SMS trong AndroidĐể viết được ứng dụng gửi SMS cho riêng mình thì các bạn chỉ cần dùng đến đối tượng là SmsManager và phương thức  sendTextMessage của nó để gửi. Ngoài ra bạn phải dùng đối tượng BroadcastReceiver để bắt được các trạng thái gửi thành công hay không từ PendingIntent phát ra.Chi tiết về code các bạn download source code: TẠI ĐÂY(Các bạn chú ý khi download sẽ g… Read More

1 nhận xét:

Cách sử dụng chức năng maps này để tìm đường đi nằm mơ thấy rắn nước cắnđó là người dùng truy cập vào địa chỉ maps.vinalo.com gà bị rắn cắn có ăn được không và chỉ cần nhập địa điểm cần tìm … website sẻ tính toán cà pháo có độc không và đưa ra địa chỉ của của địa điểm này trên phèn chua có phải là đường phèn không bản đồ và những con đường dẩn bạn đến địa điểm bạn tìm đó, hiện này thì maps của vinalo đã có app ứng dụng trên điện thoai di động rất tiện lợi để mọi người có thể tim duong khí argon có độc không hay tìm địa điểm bất cứ khi nào đang đi trên đường chỉ cần có lá dứa có độc không chiếc smart phone có kết nối internet.




Klik untuk melihat kode: :) =( :s :D :-D ^:D ^o^ 7:( :Q :p T_T @@, :-a :W *fck* x@