導航:首頁 > 源碼編譯 > 最短路徑演算法

最短路徑演算法

發布時間:2022-02-27 17:23:43

⑴ 最短路徑演算法作用

可以實現距離最短以及時間最短,從而為你節約行程的成本

⑵ "最短路徑優先演算法"的優缺點

這個演算法一般出現在網路中,用於路由器的路由定址,我也只了解這方面的優缺點。如果不對,LZ就別看了。
所謂最短路徑,實際上說的是跳數。比如從一條路走會經過三個路由器,而從另一條路走,會經過兩個路由器,那麼此演算法會判斷2跳比3跳要短,但具體每一跳會花多長時間,經過多長路程,它不會考慮的。所以不一定演算法的最短路徑就是真實的最短。因為很多因素演算法沒有考慮,比如通信質量,網線長度……
C語言我只看過一個模擬現實的例子,大概是說公車走什麼路線長度最短,那個演算法考慮的是路線的長短,而不是跳數,優點當然就是路線的絕對最短,缺點就是沒考慮到其他現實因素,比如是否堵車(相當於網路通信質量)之類。
總之不管什麼演算法,考慮到的因素就是它的優點,反過來說,缺點往往就是演算法忽略的因素。
補充一下,如果說的不是演算法本身的優劣,而是細節的實現方面,那就是從時間復雜度和空間復雜度兩個方面去考慮了,希望對LZ有用。

⑶ 最短路徑演算法 Dijkstra 用C語言編出來

#include"iostream.h"
#include"stdlib.h"
#define MAXPOINT 3//定義最大的頂點數目

#define limit 32767 //設置沒有路徑的權代替無窮大

struct record{ //沒個頂點的數據結構設置為一個數組隊列
int number; //頂點號
int flag; //標志是否從隊列中被選過如果為1表示選過為0表示未選
int allpath; //從源點到這個點的當前最短距離(權最小)
}path[MAXPOINT+1];

int cost[MAXPOINT+1][MAXPOINT+1]; //用來表示圖的鄰接矩陣

void main()
{int i,j,temp,front=1,rear=MAXPOINT,N,minnumber;
//temp表示在數組隊列中的當前下標 front表示隊列首 rear表示隊列尾
//N 表示待輸入的源點號碼 minnumber 表示選中的點的號碼
int min=32768; //設置一個初始值
for(i=1;i<=MAXPOINT;i++)
for(j=1;j<=MAXPOINT;j++)
{cout<<"請輸入從第"<<i<<"點到第"<<j<<"點的路徑長度(權)如果沒有路徑的話請輸入'32767' "<<endl;
cin>>cost[i][j]; //初始化所有點之間的(權)路徑值
}

//cout<<"請輸入源點號"<<endl; //輸入一個起點
//cin>>N;

for(N=MAXPOINT;N>=1;N--)//把每一個點輪流地都設置為起點,可以求出任意一對頂點之間的最短路徑

{ for(i=front;i<=rear;i++) //初始化每個點的信息
{if(i==N)
path[i].allpath=0;
else
path[i].allpath=limit;
path[i].flag=0;
path[i].number=i;
}

while(rear>=1) //控制循環次數
{for(temp=front;temp<=MAXPOINT;temp++)
{ if(path[temp].allpath<min&&path[temp].flag==0)//選出一個具有最值
//的點

{ minnumber=path[temp].number;
min=path[temp].allpath ;
}

}
min=32768;

path[minnumber].flag=1;//把選中的點的標志變數置1表示已經被選過避免選中

for(i=1;i<=MAXPOINT;i++)//進行類似廣度優先搜索,更新最短路徑
{if((i!=minnumber)&&(path[minnumber].allpath+cost[minnumber][i]<path[i].allpath))
path[i].allpath=path[minnumber].allpath+cost[minnumber][i];
}

rear--;//次數減1
}
rear=MAXPOINT; //恢復數組以便於下一點的循環
for(j=1;j<=MAXPOINT;j++)
{ cout<<"第"<<N<<"點到第"<<j<<"點的最短路徑長度(權)為";
cout<<path[j].allpath <<endl;
}

}

}

//這個程序可以求出任意一對頂點之間的最短路徑,不過這種演算法效率還不是很高,還有其他演算法待續

⑷ 最短路徑演算法應用在哪些方面

網路通路, 凡事可以使用圖作為模型的問題都基本可以用到,比如游戲地圖的尋找,交通路線的尋找,這種最短路徑都可以用。

⑸ 求圖中任意兩點之間最短路徑有什麼演算法

單源節點到其他任意節點的最短路徑採用Dijkstra演算法,任意兩個節點之間的最短路徑使用Floyd演算法,這兩個演算法有很多地方可以找打。

⑹ 最短路徑優先演算法

從某頂點出發,沿圖的邊到達另一頂點所經過的路徑中,各邊上權值之和最小的一條路徑叫做最短路徑。解決最短路的問題有以下演算法,Dijkstra演算法,Bellman-Ford演算法,Floyd演算法和SPFA演算法等。

⑺ 記錄所有最短路徑的最短路徑演算法

沒有一個演算法是萬能的
Dijkstra:單源最短路徑
Floyd:每對點最短路徑
SPFA(Bellmanford+隊列):快速單源最短路徑(可負權)
還有很多求最短路徑的演算法,但是歸其根本,無外乎:
Label Setting和Label Correcting兩大類,其實就是搜索法+動態規劃。
只要靈活地掌握了搜索法、動態規劃和圖論,這些演算法就都會了。

⑻ 最短路徑演算法 C語言

#include<stdio.h>

#defineMAXNODE108

intpath[MAXNODE+1][MAXNODE+1]={0};

intmain(void)
{
FILE*fpr,*fpw;
intva,vb,i,j,k;

fpr=fopen("in.txt","r");/*讀取的文件名稱in.txt*/
fpw=fopen("out.txt","w");/*path的數據在out.txt中展現*/

while(fscanf(fpr,"%d%d",&va,&vb)!=EOF)
path[va][vb]=path[vb][va]=1;

for(k=1;k<=MAXNODE;++k){
for(i=1;i<=MAXNODE;++i){
for(j=1;j<=MAXNODE;++j){
if(!path[i][k]||!path[k][j])
continue;

if(!path[i][j])
path[i][j]=path[i][k]+path[k][j];
elseif(path[i][j]>path[i][k]+path[k][j])
path[i][j]=path[i][k]+path[k][j];
}
}
}

for(i=1;i<=MAXNODE;++i){
for(j=1;j<=MAXNODE;++j){
if(i==j)
fprintf(fpw,"%-10d",0);
elseif(path[i][j])
fprintf(fpw,"%-10d",path[i][j]);
else
fprintf(fpw,"%-10d",-1);
}
fprintf(fpw," ");
}

return0;
}

注意:floyd演算法中k為最外層,這是動態規劃的思想,不能改變i,j,k的順序!!!

這是之前的答案的錯誤之處。

-1表示不通。

具體程序分析,我可以加你QQ,願意的話,你把QQ寫給我。

閱讀全文

與最短路徑演算法相關的資料

熱點內容
8253的編程方式 瀏覽:140
雲伺服器無法連接到當前網路 瀏覽:467
香港伺服器什麼時候租用 瀏覽:598
福州高精密三坐標測量儀編程 瀏覽:709
變數的作用域編譯預處理 瀏覽:177
程序員買台式機好還是筆記本 瀏覽:810
安卓叮當貓年卡怎麼樣 瀏覽:426
自學旅遊英語用什麼app 瀏覽:153
linux埠開放命令 瀏覽:680
單片機小汽車 瀏覽:953
思考與決策pdf 瀏覽:623
ted加密貨幣 瀏覽:721
聯想伺服器如何安裝硬碟陣列驅動 瀏覽:129
c語言編譯器怎麼打中文 瀏覽:491
加密exe文件打不開怎麼辦 瀏覽:14
仕女pdf 瀏覽:931
安裝儲存伺服器是什麼意思 瀏覽:112
如何改文件夾內照片的後綴 瀏覽:766
程序員與公關關系 瀏覽:204
linuxgpu測試 瀏覽:386