sponsored links

資料結構:使用者輸入有向帶權圖,求從頂點到其他各頂點的最短路徑

最短路徑

對於使用者隨機輸入的一個有向帶權圖,求從某個頂點到其他各頂點的最短路徑

#include<stdio.h>
#define MAXV 20
#define INF 32              //若<vi,vj>不存在,則設<vi,vj>的權為32,表示無窮大
typedef struct
{      int no;              /*頂點編號*/
       //  InfoType info;   /*頂點其他資訊,此處省略*/
} VertexType;               /*頂點型別*/
typedef struct
{      int edges[MAXV][MAXV];       /*鄰接矩陣*/
       int n,e;                     /*頂點數,邊數*/
       VertexType vexs[MAXV];       /*存放頂點資訊*/
}MatGraph;                          /*完整的圖鄰接矩陣型別*/

void Dispath(MatGraph g,int dist[],int path[],int s[],int v)
{  int i,j,k;
   int apath[MAXV],d;
   printf("\n");
   for(i=0;i<g.n;i++)
     if(s[i]==1 && i!=v)
     {  printf("從頂點%d到頂點%d的路徑長度為:%d\t路徑為:",v,i,dist[i]);
        d=0;apath[d]=i;
        k=path[i];
        if(k==-1)
          printf("無路徑\n");
        else
        {  while(k!=v)
        {  d++;apath[d]=k;
           k=path[k];
        }
        d++;apath[d]=v;
        printf("%d",apath[d]);
        for(j=d-1;j>=0;j--)
           printf(",%d",apath[j]);
        printf("\n");
        }
     }
}

void Dijkstra(MatGraph g,int v)
{  int dist[MAXV],path[MAXV];
   int s[MAXV];
   int mindis,i,j,u;
   for (i=0;i<g.n;i++)
   {  dist[i]=g.edges[v][i];    //距離初始化
      s[i]=0;                   //s[]置空
      if(g.edges[v][i]<INF)      //路徑初始化
        path[i]=v;              //頂點v到i有邊時,置頂點i的前一個頂點為v
      else
        path[i]=-1;             //頂點v到i沒邊時,置頂點i的前一個頂點為-1
   }
   s[v]=1;path[v]=0;            //源點編號v放入s中
   for(i=0;i<g.n-1;i++)          //迴圈直到所有頂點的最短路徑都求出
   {  mindis=INF;               //mindis置最小長度初值
      for(j=0;j<g.n;j++)        //選取不在s中且具有最小距離的頂點u
         if(s[j]==0 && dist[j]<mindis)
         {  u=j;
            mindis=dist[j];
         }
      s[u]=1;                   //頂點u加入s中
      for(j=0;j<g.n;j++)     //修改不在s中的頂點的距離
         if(s[j]==0)
            if(g.edges[u][j]<INF && dist[u]+g.edges[u][j]<dist[j])
            {  dist[j]=dist[u]+g.edges[u][j];
               path[j]=u;
            }
   }
   Dispath(g,dist,path,s,v);    //輸出最短路徑
}

void main()
{  MatGraph G;
   int V,i,j;
   printf("請輸入圖G的頂點數和邊數(用逗號分隔):");
   scanf("%d,%d",&G.n,&G.e);
   getchar();
   printf("請輸入圖G的頂點編號(用空格分隔):");
   for(i=0;i<G.n;i++)
     scanf("%d",&G.vexs[i].no);
   getchar();
   printf("請分行輸入圖G的鄰接矩陣(同一行的元素用空格分隔,每輸入完一行按回車結束):\n");
   for(i=0;i<G.n;i++)
   {  for(j=0;j<G.n;j++)
        scanf("%d",&G.edges[i][j]);
      getchar();
   }
   printf("請輸入源點V的編號:");
   scanf("%d",&V);
   Dijkstra(G,V);
}

執行結果

請輸入圖G的頂點數和邊數(用逗號分隔):5,8
請輸入圖G的頂點編號(用空格分隔):0 1 2 3 4
請分行輸入圖G的鄰接矩陣(同一行的元素用空格分隔,每輸入完一行按回車結束):
0 1 0 1 1
1 0 1 1 0
0 1 0 1 1
1 1 1 0 1
1 0 1 1 0
請輸入源點V的編號:0

從頂點0到頂點1的路徑長度為:1 路徑為:0,1
從頂點0到頂點2的路徑長度為:0 路徑為:0,2
從頂點0到頂點3的路徑長度為:1 路徑為:0,3
從頂點0到頂點4的路徑長度為:1 路徑為:0,4
分類: 歷史
時間: 2021-12-19

相關文章

搞古玩收藏,都是為了掙錢,有人選擇“爭”,有人選擇“不爭”

搞古玩收藏,都是為了掙錢,有人選擇“爭”,有人選擇“不爭”
宣告:文章轉載自鳳凰網,僅為轉載,侵權可聯絡刪除 古玩界,大家都在爭來爭去,爭得是什麼?其實大家自己很清楚,無非就是金錢.四處走穴.虛假鑑定.虛高價格的崔凱.鄧丁三.葉佩蘭.楊實.鄧丁三.張慶玉.朱克 ...

市場說沒就沒,於正四年二十部劇讓唐人亂了陣腳,失去了統治地位

市場說沒就沒,於正四年二十部劇讓唐人亂了陣腳,失去了統治地位
現在影視圈都流傳著這樣一個說法,就是正午陽光出品的電視劇必是精品,號稱國劇之光. <父母愛情><琅琊榜><歡樂頌><偽裝者><都挺好>< ...

2021年僅過去8個月,就有10位知名港星去世,每一位都令人不捨

2021年僅過去8個月,就有10位知名港星去世,每一位都令人不捨
文 | 王珍一 編輯 | 嘈坊 2021年已經過去了8個月,娛樂圈也發生了很多事情,有人憑實力被大眾熟知,有人離婚,有人被封殺. 也有人永遠的離開了我們,今天我們就來說一說2021年1月至今去世的10 ...

我寫作就為說出那些無法撲在你懷裡哭訴的話
整理/雨驛 主題:關於父親的詩與思--關於向迅<與父親書> 時間:2021年7月18日19:00 地點:武漢卓爾書店 嘉賓:向迅散文作家 李修文作家.影視編劇 用自己的寫作讓父親重新誕生一 ...

老天爺賞飯吃,演古裝美男我只服這6位,行走的古風衣架子

老天爺賞飯吃,演古裝美男我只服這6位,行走的古風衣架子
(原創不易 抄襲必究) 演技好不好,造型少不了. 對於一部劇來說,演員的表現是否讓觀眾共情有代入感,除了其本身的演技之外,還是需要造型也有代入感的,這一點在古裝劇上的體現尤為明顯. 近日,彭小苒和金瀚 ...

“黃袍”加身
終於還是要"黃袍"加身了!從此加入美團,做個快樂無憂的外賣小哥!從二十四歲出道打天下,一直到四十歲都在做老闆,真的是從家產數萬到身無分文,再從身無分文到現在的負債累累!人累,心更累 ...

福全:順治之子,康熙的親哥哥,當了36年賢王,比胤祥的格局還大

福全:順治之子,康熙的親哥哥,當了36年賢王,比胤祥的格局還大
清朝康熙四十二年(1703年)六月,康熙帝正在塞外巡視,北京八百里加急送來訊息,說裕親王福全病重.康熙頓時驚慌失措,連忙下令結束行程,提前返京,遺憾的是,還未等康熙回到北京,福全已經病逝.康熙非常痛心 ...

蘇麻喇姑:康熙的啟蒙女師,除夕喝洗澡水,活了93歲,成清朝傳奇

蘇麻喇姑:康熙的啟蒙女師,除夕喝洗澡水,活了93歲,成清朝傳奇
清朝康熙四十四年(1705年)九月初七,清宮中一位年長的宮女病逝,康熙的心情十分沉痛,下旨為該宮女舉辦隆重的葬禮.這次葬禮有三個比較特殊的地方: 第一,這位宮女已經93歲了,歷經天命.天聰.崇德.順治 ...

康熙親臨曲阜,有良苦用心,尊紀崇儒、重視封建教化,正人先正己
古往今來,封建專制統治者沒有願意讓別人說自己是無道德,為了博取民眾的信任和強化自己的統治,他們多半知道靠武力解決不了問題,於是就藉助思想武器去征服人心,利用輿論力量粉飾當朝政治,美化自己的形象. 康熙 ...

關於紅學的“索引”與“考證”:蔡胡之爭哪個更接近作品真相

關於紅學的“索引”與“考證”:蔡胡之爭哪個更接近作品真相
一代大師塑像 提起發生在百年前民國學界紅學研究的"索引"與"考證",紅迷朋友們自然會聯想起名聞遐邇的"蔡胡之爭". 筆者以為,就蔡元培的&l ...

沒了金九銀十,新能源車仍逆風獨舞

沒了金九銀十,新能源車仍逆風獨舞
長達七天的國慶長假轉眼飛逝,也交出了足夠亮眼的成績單,旅遊收入.電影票房.零售餐飲.旅遊收入等多項資料都十分可觀. 據文化和旅遊部資料顯示,10月1日至7日,國內旅遊出遊5.15億人次,按可比口徑恢復 ...

康熙平定“三藩”之亂

康熙平定“三藩”之亂
三藩之亂是清朝內部的一次大內亂,同時也是聖君康熙大顯身手的一次戰爭.三藩之亂,從本質來說,就是中央與地方的權力之爭.在滿族剛剛入關的時候,實力並不強大.尤其是政治實力.滿族是馬背上的民族,對於一個泱泱 ...

《紅高粱》:為何餘佔鰲對九兒又敬又愛,卻只把戀兒當個姘頭?

《紅高粱》:為何餘佔鰲對九兒又敬又愛,卻只把戀兒當個姘頭?
<紅高粱>裡的經典鏡頭,就是餘佔鰲和九兒在高粱地裡求H的場景,拍攝過程中還出現過一個小插曲. 因朱亞文用力過猛,導致周迅手臂受傷,朱亞文遭到導演怒,但所幸兩位演員克服困難,完成了拍攝. 說 ...

威少能進名人堂嗎?NBA四冠王給出答案:必須帶領湖人奪冠

威少能進名人堂嗎?NBA四冠王給出答案:必須帶領湖人奪冠
日前,前NBA球員約翰-塞利在一檔名為<VLADTV>的節目中,談到了歷史三雙王威少.當主持人向他問及威少能否進入名人堂,塞利給出了可能性的回答. 威少已經回家了,他必須要贏得總冠軍.關於 ...

聖人王陽明百年之後的家族醜聞:子孫為爭襲爵位,相爭二十餘年

聖人王陽明百年之後的家族醜聞:子孫為爭襲爵位,相爭二十餘年
正德十四年,位於江西的藩王寧王朱辰濠起兵造反,時任南贛的巡撫的王守仁平定了叛亂.王守仁也因平定"寧王之亂"的功績在嘉靖時被封為新建伯.雖然之後的四十餘年間發生了不少波折,導致新建伯 ...

王潤蘭:23歲打進奧運決賽,被惡意取消資格,24歲犧牲在抗日戰場

王潤蘭:23歲打進奧運決賽,被惡意取消資格,24歲犧牲在抗日戰場
在全面抗日戰爭打響之前,德日還未簽訂盟約之前,"中德"之間其實是有過一小段時間"蜜月時期"的.中國運動健兒能夠出戰1936年柏林奧運會也算得益於此.甚至,當時的 ...

王冰冰成央視頂流!穿T恤拍綜藝人氣爆棚徹底火,更被倪萍誇上天

王冰冰成央視頂流!穿T恤拍綜藝人氣爆棚徹底火,更被倪萍誇上天
王冰冰如今算是央視力捧的紅人了,更是成為了央視頂流的主播,就連倪萍老師在節目中,對於王冰冰也是十分欣賞,更是誇讚她是央視的收視密碼,看來未來王冰冰真的有穩坐一姐的可能了. 而王冰冰最近因為參加央視的自 ...

“鬼才之眼”王昱珩一戰成名三戰封神,助警察成功破案,如今咋樣

“鬼才之眼”王昱珩一戰成名三戰封神,助警察成功破案,如今咋樣
2014年,一檔名叫<最強大腦>的節目刷爆網路. 一個個像擁有"特異功能"的選手層出不窮,讓觀眾大呼"神人". 而隨著節目的熱播,節目組的官方媒體號 ...

伊麗莎白王太后:她具有雙重人格,卻喜歡對自己所做的事深信不疑

伊麗莎白王太后:她具有雙重人格,卻喜歡對自己所做的事深信不疑
作者:山佳 都說七十歲有個家,八十歲有個媽,英國的查爾斯王子,如今都73歲了,但老媽一直在他左右,也就是95歲的英國女王. 其實,女王的老媽,即伊麗莎白王太后,也很厲害,這老太太活了102歲,創造了王 ...

無淪是誰,都不可以傷害王默,不管是夢公主還是冰公主都不行

無淪是誰,都不可以傷害王默,不管是夢公主還是冰公主都不行
在精靈夢葉羅麗的世界中,想要傷害王默是一件很危險的事情,不是因為王默自身有多麼強大,而是有一個非常強大的男人保護著王默,這個男人就是淨水湖的主人,水王子水清漓. 夢公主自以為在自己的夢中世界當中,自己 ...