亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

秦皇岛市| 晋江市| 福州市| 河东区| 贡嘎县| 阿瓦提县| 达孜县| 彭阳县| 称多县| 平泉县| 黎城县| 临江市| 龙岩市| 大关县| 宣化县| 白银市| 喜德县| 光山县| 叶城县| 龙泉市| 儋州市| 龙陵县| 鹿泉市| 太湖县| 临沂市| 云浮市| 灵宝市| 武城县| 德兴市| 岱山县| 河曲县| 历史| 五峰| 射洪县| 汶川县| 平远县| 安福县| 萝北县| 什邡市| 永康市| 河池市|