最短路径迪杰斯特拉算法 c语言,Dijkstra第K最短路径算法
該樓層疑似違規已被系統折疊?隱藏此樓查看此樓
//運籌學之最短路徑
#include?
#include?
#define?M?99999
int?main()
{
int?G[100][100];
int?n;
int?p[100],flag[100],s[100];
int?cur;
int?m,k,l,i,j;
ifstream?fin("in.txt");
//enter
fin>>n;
for(i=0;i
for(j=0;j
G[i][j]=M;
for(i=0;i
{
fin>>m;
for(j=0;j
{
fin>>k>>l;
G[i][k-1]=l;
}
}
for(i=0;i
{
flag[i]=0;
s[i]=M;
}
cur=0;
flag[cur]=1;
s[cur]=0;
p[cur]=0;
for(i=1;i
{
for(j=0;j
{
if(flag[j]==0)
{
m=s[cur]+G[cur][j];
if(m
{
s[j]=m;
p[j]=cur;
}
}
}
m=M;
for(j=0;j
{
if(flag[j]==0)
{
if(s[j]
{
m=s[j];
cur=j;
}
}
}
flag[cur]=1;
if(s[cur]==M)
{
//continue;
p[cur]=0;
for(j=0;j
if(flag[j]==0)
{
s[j]=M;
p[j]=0;
flag[j]=1;
}
break;
}
}
ofstream?fout("out.txt");
for(i=1;i
{
if(s[i]==M)
{
cout<
fout<
}
else
{
cout<
cout<
fout<
fout<
k=p[i];
cout<
fout<
while(k!=0)
{
k=p[k];
cout<
fout<
}
}
cout<
fout<
}
return?0;
}
測試數據:
11
2?2?2?4?8
2?5?1?4?6
2?7?9?1?1
1?3?7
2?9?1?4?5
3?5?3?4?1?7?4
3?4?7?9?3?10?1
2?5?2?11?9
2?6?6?8?7
2?9?1?11?4
1?9?2
11表示有11個頂點的圖
2?2?2?4?8
2表示第一個頂點射出2條線,2?2表示1->2的長度為2。。。。。。。。
輸出數據:
從第1個點到第2的最短路為:2.
路徑為:2?
從第1個點到第3的最短路為:15.
路徑為:3?
從第1個點到第4的最短路為:8.
路徑為:4?
從第1個點到第5的最短路為:3.
路徑為:5?
從第1個點到第6的最短路為:10.
路徑為:6?
從第1個點到第7的最短路為:14.
路徑為:7?
從第1個點到第8的最短路為:11.
路徑為:8?
從第1個點到第9的最短路為:4.
路徑為:9?
從第1個點到第10的最短路為:15.
路徑為:10?
從第1個點到第11的最短路為:19.
路徑為:11?
總結
以上是生活随笔為你收集整理的最短路径迪杰斯特拉算法 c语言,Dijkstra第K最短路径算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 空调c语言入门自学视频教程,本人大一,自
- 下一篇: 中柏ezpadE7装linux,中柏EZ