Tìm đường đi ngắn nhất theo thuật toán Floyd

e code như vầy mà chạy lại k ra kq mn giúp e với ạ

void inDuongDi(int S, int F)
{
	printf("\n(%d,%d)=%d - DUONG DI: %d",S,F,D[S][F],S);
	int k=S;
	while(k!=F){
		printf("->%d",DinhSau[k][F]);
		k=DinhSau[k][F];
	}
}
void Floyd(DOTHI g)
{
	for(int i=0; i<g.n; i++){
		for(int j=0; j<g.n; j++){
			if(g.a[i][j] > 0){
				
				DinhSau[i][j]=j;
				D[i][j]=g.a[i][j];
			}
			else{
				D[i][j]=VOCUC;
				DinhSau[i][j]=-1;
			}
			D[i][j]=0;
		}
	}
	for(int k=0; k<g.n; k++){
		for(int i=0; i<g.n; i++){
			for(int j=0; j<g.n; j++){
				if(D[i][j] > D[i][k]+ D[k][j]){
					D[i][j]= D[i][k]+ D[k][j];
					DinhSau[i][j]=DinhSau[i][k];
				}
			}
				
		}
			
	}
	for(int i=0; i<g.n; i++){
		for(int j=0; j<g.n; j++){
			if(D[i][j]>0 && D[i][j]<VOCUC)
				inDuongDi(i,j);
		}
			
	}
}
int main()
{
	DOTHI g;
	DocMaTranKe(inputfile,g);
	XuatMaTranKe(g);
	int S,F;
	printf("Nhap dinh bat dau S:"); scanf("%d",&S);
	printf("Nhap dinh ket thuc F:"); scanf("%d",&F);
	Floyd(g);
}

Code này mình thấy đúng rồi.
Nhưng không thấy code của bạn có chỗ nào định nghĩa ma trận DinhSau và ma trận D nhỉ?

Bạn định nghĩa ngoài hàm à?

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?