1 Tìm đường đi dài nhất trong đồ thi có hướng bằng thuật toán Dijkstra Sat Feb 11, 2012 3:49 pm
vitaminC2009
Thành viên bắt đầu chia sẻ
Mình có 1 đoạn code tìm đường đi ngắn nhất bằng Dijkstra, nhưng muốn tìm đường đi dài nhất phải thế nào đây hic hic
Đoạn code tìm đường đi ngắn nhất như sau :-(
#include
#include
#include
#include
#define FileIn "Bai7.inp"
void Doc_File(int**A, int &n, int &D, int &C){
FILE*f = fopen("I:\\Bai7.inp","rb");
fscanf(f,"%d%d%d",&n,&D,&C);
cout<<"Ma Tran Lien Ket Tuong Ung.\n"< *A = new int [n];
FOR(int i =0;i A[i] = new int [n];
FOR(int j =0;j fscanf(f,"%d",&A[i][j]);
cout< }
cout< }
fclose(f);
D--; C--;
}
void Dijkstra(int **A, int n, int D, int C) {
char *DanhDau = new char[n];
int *Nhan = new int[n];
int *Truoc = new int[n];
int XP, min;
FOR(int i=0; 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 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 if(min>Nhan[j]&& DanhDau[j]==0){
min = Nhan[j] ;
XP = j ;
}
DanhDau[XP] = 1;
}
cout<<"Duong Di Ngan Nhat La:"< cout< i = Truoc[C];
WHILE(i!=D){
i = Truoc[i];
cout<<" <- "< }
} void main() {
int**A,n,Dau,Cuoi;
Doc_File(A,n,Dau,Cuoi);
Dijkstra(A,n,Dau,Cuoi);
delete*A;
getch();
}
Đoạn code tìm đường đi ngắn nhất như sau :-(
#include
#include
#include
#include
#define FileIn "Bai7.inp"
void Doc_File(int**A, int &n, int &D, int &C){
FILE*f = fopen("I:\\Bai7.inp","rb");
fscanf(f,"%d%d%d",&n,&D,&C);
cout<<"Ma Tran Lien Ket Tuong Ung.\n"<
FOR(int i =0;i
FOR(int j =0;j
cout< }
cout<
fclose(f);
D--; C--;
}
void Dijkstra(int **A, int n, int D, int C) {
char *DanhDau = new char[n];
int *Nhan = new int[n];
int *Truoc = new int[n];
int XP, min;
FOR(int i=0; i
DanhDau[i] = 0;
Truoc[i] = D;
}
Nhan[D] = 0;
DanhDau[D] = 1;
XP = D;
WHILE(XP != C){
FOR(int j=0; j
Nhan[j] = A[XP][j]+Nhan[XP];
Truoc[j] = XP;
}
min = MAXINT;
FOR(j = 0; j
min = Nhan[j] ;
XP = j ;
}
DanhDau[XP] = 1;
}
cout<<"Duong Di Ngan Nhat La:"<
WHILE(i!=D){
i = Truoc[i];
cout<<" <- "< }
} void main() {
int**A,n,Dau,Cuoi;
Doc_File(A,n,Dau,Cuoi);
Dijkstra(A,n,Dau,Cuoi);
delete*A;
getch();
}