c语言bellman算法,求 最短路径中BELLMAN FORD算法实现的C程序
匿名用戶
1級
2010-06-01 回答
//這個是鄰接表
typedef struct oo
{
int len,num;
struct oo *next;
} link;
typedef struct
{
int num;
link *next;
} graph;
/*
node[]圖的鄰接表
n節點總數
s源點
dis[]到源點的最短路徑長度
pre[]最短路徑上的前驅結點
算法返回true,當且僅當途中不包含從源點可達的負權回路
*/
bool bellmanFord(graph node[],int n,int s)
{
int dis[MAX],pre[MAX];
int i,j;
link *p;
for(i=0;i
{
dis[i]=MAXVALUE;
pre[i]=-1;
}
dis[s]=0;
for(i=0;i
{
p=node[i].next;
while(p)
{
if(p->len+dis[i]num])
{dis[p->num]=p->len+dis[i];pre[p->num]=i;}
p=p->next;
}
p=node[i].next;
while(p)
{
if(p->len+dis[i]num])
return false;
p=p->next;
}
}
for(i=0;i
{
printf("%d %d\n",i,dis[i]);
j=i;
while(j!=-1)
{
printf("%d ",j);
j=pre[j];
}
cout<
}
return true;
}
//這個是鄰接矩陣
const int MAX = 100;
const int MAXVALUE = 1000;
int graph[MAX][MAX],n;
/*
graph[][]圖的鄰接陣
n 圖的節點數
s 源點
dis[] 存放最短路徑
pre[] 存放最短路徑上的前驅節點
算法返回true,當且僅當途中不包含從源點可達的負權回路,并輸出每個節點最短路徑的前驅值
*/
bool bellmanFord(int graph[][MAX],int n,int s)
{
int dis[MAX],pre[MAX];
int i,j,k;
for(i=0;i
{
dis[i]=MAXVALUE;
pre[i]=-1;
}
dis[s]=0;
for(i=0;i
{
for(j=0;j
if(i!=j&&dis[j]>dis[i]+graph[i][j])
{
dis[j]=dis[i]+graph[i][j];
pre[j]=i;
}
for(j=0;j
if(i!=j&&dis[j]>dis[i]+graph[i][j])
return false;
}
for(i=0;i
{
printf("%d %d\n",i,dis[i]);
k=i;
while(pre[k]!=-1)
{
printf("%d ",pre[k]);
k=pre[k];
}
cout<
}
return true;
}
總結
以上是生活随笔為你收集整理的c语言bellman算法,求 最短路径中BELLMAN FORD算法实现的C程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 矿井通风计算c语言_矿井主通风机的技术发
- 下一篇: android layoutparams