Của bạn đây. Thao khảo đi. Mã: #include <stdio.h> #include <conio.h> #include <iostream.h> #define max 5 #define maxpt 100 int chuaxet[max], truoc[max],d[max]; void nhapdt(int m[max][max],int n) { int i,j; for(i=0;i<n;i++) for(j=0;j<n;j++) { cout<<"A["<<i<<"]["<<j<<"] ="; cin>>m[i][j]; cout<<endl; } } void indt(int mt[max][max], int n) { int i,j; for(i=0;i<n;i++) { for(j=0;j<n;j++) cout<<mt[i][j]<<"\t"; cout<<"\n"<<"\n"; } cout<<endl; } void ktchuaxet(int n) { for(int i=0;i<n;i++) chuaxet[i]=1; } void dijkstra(int s,int m[max][max], int n) { int T,u,min; for(int v=0;v<n;v++) { d[v]=m[s][v]; truoc[v]=s; } d[s]=0;T=1;chuaxet[s]=0; while (T<=n) { min=maxpt; for(int i=1;i<n;i++) if(chuaxet[i]&&d[i]<min) { min=d[i]; u=i; } chuaxet[u]=0;T++; for (v=0;v<n;v++) if (chuaxet[v]&&(d[v]>d[u]+m[u][v])) { d[v]=d[u]+m[u][v]; truoc[v]=u; } } } void main() { int M[max][max],t; clrscr(); int n; cout<<"Nhap so dinh = ";cin>>n; ktchuaxet(n); nhapdt(M,n); indt(M,n); ktchuaxet(n); dijkstra(0,M,n); cout<<"\nNhap dinh can tim KC nho nhat den s: "; cin>>t; cout<<endl<<"KC nho nhat tu dinh 0 den "<<t<<" la: "<<d[t]; cout<<endl<<"Duong di la: "<<t<<"<-"; while(t!=0) { t=truoc[t]; cout<<t<<"<-"; } getch(); }
bạn có thể tham khảo tại đây: http://2mit.org/forum/showthread.ph...gan-nhat-bang-bang-ghi-nhan?p=30731#post30731