最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言實現(xiàn)Floyd算法

 更新時間:2018年01月03日 14:00:37   作者:礪晗  
這篇文章主要為大家詳細介紹了C語言實現(xiàn)Floyd算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

#include <stdio.h> 
#include <stdlib.h> 
#include <limits.h> 
#define NUM 4 
 
typedef struct MGraph  /* 鄰接表存儲結(jié)構(gòu) */ 
{ 
  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); 
  } 
  } 
} 

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言清楚了解指針的使用

    C語言清楚了解指針的使用

    C語言這門課程在計算機的基礎(chǔ)教學(xué)中一直占有比較重要的地位,然而要想突破C語言的學(xué)習(xí),對指針的掌握是非常重要的,本文將具體針對指針的基礎(chǔ)做詳盡的介紹
    2022-06-06
  • C++中鏈表操作實例分析

    C++中鏈表操作實例分析

    本文給大家分享了個人對于C++中鏈表操作的理解,并對具體實例進行了分析,是篇非常不錯的學(xué)習(xí)鏈表操作的文章,希望大家能夠喜歡
    2017-07-07
  • C語言 指針的初始化賦值案例詳解

    C語言 指針的初始化賦值案例詳解

    這篇文章主要介紹了C語言 指針的初始化賦值案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 深入解析C++編程中的運算符重載

    深入解析C++編程中的運算符重載

    這篇文章主要介紹了C++編程中的運算符重載,運算符重載是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2016-04-04
  • C語言基于單鏈表實現(xiàn)通訊錄功能

    C語言基于單鏈表實現(xiàn)通訊錄功能

    這篇文章主要為大家詳細介紹了C語言基于單鏈表實現(xiàn)通訊錄功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Qt數(shù)據(jù)庫應(yīng)用之實現(xiàn)通用數(shù)據(jù)生成器

    Qt數(shù)據(jù)庫應(yīng)用之實現(xiàn)通用數(shù)據(jù)生成器

    有兩種應(yīng)用場景需要用到數(shù)據(jù)生成器,一種是需要測試數(shù)據(jù)庫性能,一種是隨機模擬生成一堆數(shù)據(jù),用來測試程序的性能。本文將利用Qt實現(xiàn)通用數(shù)據(jù)生成器,需要的可以參考一下
    2022-02-02
  • 講解C++編程中Address-of運算符&的作用及用法

    講解C++編程中Address-of運算符&的作用及用法

    這篇文章主要介紹了C++編程中Address-of運算符&的作用及用法,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2016-01-01
  • C語言詳細講解循環(huán)語句的妙用

    C語言詳細講解循環(huán)語句的妙用

    C語言循環(huán)控制語句是一個基于C語言的編程語句,該語句主要有while循環(huán)語句、do-while循環(huán)語句和for循環(huán)語句來實現(xiàn)循環(huán)結(jié)構(gòu),在循環(huán)過程中還有關(guān)鍵字break、continue、do、break控制中斷繼續(xù)與結(jié)束等操作
    2022-04-04
  • 詳解C語言的結(jié)構(gòu)體中成員變量偏移問題

    詳解C語言的結(jié)構(gòu)體中成員變量偏移問題

    這篇文章主要介紹了C語言的結(jié)構(gòu)體中成員變量偏移問題,以講解如何編寫宏來對成員變量進行修改為主,需要的朋友可以參考下
    2016-04-04
  • C語言程序如何求學(xué)生總成績和平均成績

    C語言程序如何求學(xué)生總成績和平均成績

    這篇文章主要介紹了C語言程序如何求學(xué)生總成績和平均成績,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評論

疏附县| 武功县| 京山县| 资阳市| 内黄县| 壤塘县| 昭觉县| 广丰县| 长武县| 宾阳县| 阜阳市| 正镶白旗| 大连市| 宁武县| 丰原市| 体育| 揭西县| 平原县| 涿州市| 堆龙德庆县| 霞浦县| 天津市| 鸡东县| 万宁市| 长武县| 栾城县| 佛教| 油尖旺区| 鲜城| 弋阳县| 习水县| 正蓝旗| 游戏| 南宫市| 丁青县| 同仁县| 林周县| 抚顺县| 安康市| 万源市| 丹巴县|