贪心算法求单元最短路径

2019-07-27 10:14

#include \#include #include #include

using namespace std;

const int N = 5; const int M = 1000; ifstream fin(\

template

void Dijkstra(int n,int v,Type dist[],int prev[],Type c[][N+1]);

void Traceback(int v,int i,int prev[]);//输出最短路径 v源点,i终点

int main() {

int v = 1;//源点为1

int dist[N+1],prev[N+1],c[N+1][N+1];

cout<<\有向图权的矩阵为:\ for(int i=1; i<=N; i++) {

for(int j=1; j<=N; j++) {

fin>>c[i][j]; cout<

cout<

Dijkstra(N,v,dist,prev,c);

for(int i=2; i<=N; i++) {

cout<<\源点1到点\的最短路径长度为:\,其路径为\ Traceback(1,i,prev); cout<

return 0; }

template

void Dijkstra(int n,int v,Type dist[],int prev[],Type c[][N+1]) {

bool s[N+1];

for(int i=1; i<=n; i++) {

dist[i] = c[v][i];//dist[i]表示当前从源到顶点i的最短特殊路径长度 s[i] = false;

if(dist[i] == M) {

prev[i] = 0;//记录从源到顶点i的最短路径i的前一个顶点 } else {

prev[i] = v; } }

dist[v] = 0; s[v] = true;

for(int i=1; i

int temp = M;

int u = v;//上一顶点

//取出V-S中具有最短特殊路径长度的顶点u for(int j=1; j<=n; j++) {

if((!s[j]) && (dist[j]

u = j;

temp = dist[j]; } }

s[u] = true;

//根据作出的贪心选择更新Dist值 for(int j=1; j<=n; j++) {

if((!s[j]) && (c[u][j]

Type newdist = dist[u] + c[u][j]; if(newdist < dist[j])

{

dist[j] = newdist; prev[j] = u; } } } } }

//输出最短路径 v源点,i终点 void Traceback(int v,int i,int prev[]) {

if(v == i) {

cout<

Traceback(v,prev[i],prev); cout<<\ }

运行结果:


贪心算法求单元最短路径.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:北京联合大学校学生会工作手册

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: