Dijkstra算法和Bellman-ford算法
来源:互联网 发布:php上传图片压缩大小 编辑:程序博客网 时间:2024/04/28 07:52
///////////////////////////////////////////////////////////////////////////////Dijkstra, 不能解决含负权值边的图
#include<iostream>
#include<queue>
#include<stack>
#include<cstring>
using namespace std;
int main()
{
int weight[5][5]={{0,50,-1,80,-1},
{-1,0,60,90,-1},
{-1,-1,0,-1,40},
{-1,-1,20,0,70},
{-1,50,-1,-1,0}};
int parentV[5]={0};
int min[5];
for(int i=0;i<5;i++)
min[i]=10000;
char v[5]={'A','B','C','D','E'};
queue<int> nextV;
stack<int> routeV;
int usedV[5]={0};
int currentV;
nextV.push(0);
min[0]=0;
while(!nextV.empty())
{
currentV=nextV.front();
nextV.pop();
for(int i=0;i<5;i++)
{
if(weight[currentV][i]>0)
{
if(min[currentV]+weight[currentV][i]<min[i])
{
min[i]=min[currentV]+weight[currentV][i];
parentV[i]=currentV;
}
if(usedV[i]==0)
{
nextV.push(i);
usedV[i]=1;
}
}
}
}
cout << "Shortest route:" << endl;
for(int i=1;i<5;i++)
{
cout << "A->" << v[i] << ": " << min[i] << ", ";
int routeI=i;
while(parentV[routeI]!=0)
{
routeV.push(parentV[routeI]);
routeI=parentV[routeI];
}
cout << "A";
while(!routeV.empty())
{
cout << "->" << v[routeV.top()];
routeV.pop();
}
cout << "->" << v[i] << endl;
}
return 0;
}
///////////////////////////////////////////////////////////////////////////////Bellman-ford,不能解决含负权值回路的图
#include<iostream>
#include<stack>
#define INF 999999
using namespace std;
int main()
{
int weight[7][7]={{0,6,5,5,INF,INF,INF},
{INF,0,INF,INF,-1,INF,INF},
{INF,-2,0,INF,1,INF,INF},
{INF,INF,-2,0,INF,-1,INF},
{INF,INF,INF,INF,0,INF,3},
{INF,INF,INF,INF,INF,0,3},
{INF,INF,INF,INF,INF,INF,0}};
//cout << sizeof(int) << INF;
int dist[7][7];
stack<int> routeV;
int parentV[7];
int minJ=INF,minParent;
for(int i=0;i<7;i++)
{
dist[1][i]=weight[0][i];
parentV[i]=0;
}
for(int k=2;k<7;k++)
{
for(int j=0;j<7;j++)
{
for(int m=0;m<7;m++)
{
if(m!=j)
{
if(dist[k-1][m]+weight[m][j]<minJ)
{
minJ=dist[k-1][m]+weight[m][j];
minParent=m;
}
}
}
if(minJ<dist[k-1][j])
{
dist[k][j]=minJ;
parentV[j]=minParent;
}
else
{
dist[k][j]=dist[k-1][j];
}
minJ=INF;
}
}
cout << "Shortest route: " << endl;
for(int i=1;i<7;i++)
{
cout << "0->" << i << " : ";
cout << dist[6][i] << ", ";
int routeI=i;
while(parentV[routeI]!=0)
{
routeV.push(parentV[routeI]);
routeI=parentV[routeI];
}
cout << "0";
while(!routeV.empty())
{
cout << "->" << routeV.top();
routeV.pop();
}
cout << "->" << i << endl;
}
return 0;
}
- Bellman-Ford和Dijkstra算法
- Bellman-Ford算法和Dijkstra算法
- Dijkstra算法和Bellman-ford算法
- 单源最短路径算法--Dijkstra算法和Bellman-Ford算法
- Dijkstra算法、Bellman-Ford算法、Floyd算法
- 单源最短路径—Bellman-Ford和Dijkstra算法
- 最短路算法 Dijkstra Bellman-Ford SPFA
- Dijkstra、Bellman-ford、SPFA、Floyd算法
- 最短路算法 Dijkstra Bellman-ford 应用
- 【最短路径】:Dijkstra算法、SPFA算法、Bellman-Ford算法和Floyd-Warshall算法
- Bellman-ford和spfa算法
- Bellman-ford和spfa算法
- 最短路径(Floyd算法和Dijkstra算法和Bellman-Ford算法)
- 算法——单源最短路径:Bellman-Ford算法、Dijkstra算法
- 算法导论-最短路径-Dijkstra算法+Bellman-Ford 算法
- Bellman-ford算法与Dijkstra算法(RIP和OSPF的基本算法)
- Bellman-ford算法与Dijkstra算法(RIP和OSPF的基本算法)
- Dijkstra算法,Bellman-Ford算法和BFS算法解决有向图的单源最短路径问题
- hibernate自定义主键生成策略2---关于Configurable接口继承和PersistentIdentifierGenerator常量的测试
- VisibleIndex显示混乱,列的顺序发生变化(C#)
- 关于数据库乱码问题
- C#正则表达式字符列表
- 使用SELinux布尔值
- Dijkstra算法和Bellman-ford算法
- 图像镜像与图像转置
- 08月2日 星期一
- 存储过程小结
- OGNL总结
- min-height和max-height
- [经验] 基于Xmodem的STM32的IAP升级【转】
- AD7175-2使用问题记录
- OC学习:NSURL讲解和OC中图片下载