中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言如何實現Floyd算法

發布時間:2021-05-28 12:17:56 來源:億速云 閱讀:179 作者:小新 欄目:編程語言

這篇文章主要介紹了C語言如何實現Floyd算法,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

本文實例為大家分享了C語言實現Floyd算法的具體代碼,供大家參考,具體內容如下

#include <stdio.h> 
#include <stdlib.h> 
#include <limits.h> 
#define NUM 4 
 
typedef struct MGraph  /* 鄰接表存儲結構 */ 
{ 
  int edges[NUM][NUM]; 
  int n,e; 
} MGraph; 
 
MGraph *build_mgraph(); 
void Floyd(MGraph *mgraph); 
void Ppath(int path[][NUM], int i, int j); 
void Dispath(int A[][NUM], int path[][NUM], int n); 
 
int main(void) 
{ 
  MGraph *mgraph; 
 
  printf("\n*************************************************************\n"); 
  printf("該圖的矩陣表示為:\n"); 
  mgraph=build_mgraph(); 
  printf("\n*************************************************************\n"); 
  printf("各頂點間最短路徑為:\n"); 
  Floyd(mgraph); 
  printf("\n*************************************************************\n"); 
  
  return 0; 
} 
 
MGraph *build_mgraph() 
{ 
  int i,j; 
  int num_e=0; 
  MGraph *mgraph=(MGraph *)malloc(sizeof(MGraph)); 
  int matrix[NUM][NUM]={{0,5,INT_MAX,7}, 
    {INT_MAX,0,4,2}, 
    {3,3,0,2}, 
    {INT_MAX,INT_MAX,1,0}}; 
  for(i=0;i<NUM;i++) 
  { 
  for(j=0;j<NUM;j++) 
  { 
   mgraph->edges[i][j]=matrix[i][j]; 
   if(matrix[i][j]!=0 && matrix[i][j]!=INT_MAX) 
   num_e++; 
  } 
  } 
  mgraph->n=NUM; 
  mgraph->e=num_e; 
 
  printf("node=%d;edges=%d\n",mgraph->n,mgraph->e); 
  for(i=0;i<NUM;i++) 
  { 
  for(j=0;j<NUM;j++) 
  { 
   if(mgraph->edges[i][j]!=INT_MAX) 
   printf("%3d",mgraph->edges[i][j]); 
   else 
   printf("%3c",'&'); 
  } 
  printf("\n"); 
  } 
 
  return mgraph; 
} 
 
void Floyd(MGraph *mgraph) 
{ 
  int A[NUM][NUM],path[NUM][NUM]; 
  int i,j,k; 
 
  for(i=0;i<mgraph->n;i++) 
  { 
  for(j=0;j<mgraph->n;j++) 
  { 
   A[i][j]=mgraph->edges[i][j]; 
   path[i][j]=-1; 
  } 
  } 
 
  for(k=0;k<mgraph->n;k++) 
  { 
  for(i=0;i<mgraph->n;i++) 
  { 
   for(j=0;j<mgraph->n;j++) 
   { 
   if(A[i][k]!=INT_MAX && A[k][j]!=INT_MAX && A[i][j]>A[i][k]+A[k][j]) 
   { 
    A[i][j]=A[i][k]+A[k][j]; 
    path[i][j]=k; 
   } 
   } 
  } 
  } 
 
  Dispath(A,path,mgraph->n); 
} 
 
void Ppath(int path[][NUM], int i, int j) 
{ 
  int k; 
 
  k=path[i][j]; 
  if(k==-1) 
  return; 
  Ppath(path,i,k); 
  printf("%d,",k); 
  Ppath(path,k,j); 
} 
void Dispath(int A[][NUM], int path[][NUM], int n) 
{ 
  int i,j; 
  for(i=0;i<n;i++) 
  { 
  for(j=0;j<n;j++) 
  { 
   if(A[i][j]==INT_MAX) 
   printf("%d-%d have no path",i,j); 
   printf("%d-%d-%d: ",i,j,A[i][j]); 
   printf("%d,",i); 
   Ppath(path,i,j); 
   printf("%d\n",j); 
  } 
  } 
}

感謝你能夠認真閱讀完這篇文章,希望小編分享的“C語言如何實現Floyd算法”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

锡林浩特市| 来宾市| 阿巴嘎旗| 江西省| 南漳县| 兰考县| 南靖县| 南城县| 云和县| 汽车| 贡觉县| 那坡县| 定襄县| 山丹县| 永丰县| 汽车| 禄丰县| 大安市| 壶关县| 长宁县| 肃北| 黄浦区| 封丘县| 竹溪县| 珠海市| 江津市| 石景山区| 博爱县| 盘锦市| 延津县| 福州市| 瑞昌市| 赣榆县| 龙游县| 临泉县| 苍南县| 永嘉县| 宜良县| 隆子县| 滨州市| 合水县|