无向图最短路径搜索c语言,C++构造无向图&求最短路径源码

用vector es[MAX]表示点,每个点队列里放着点的相邻边和到边的距离。

以下源码经过测试可运行

#include

#include

#include

using namespace std;

#define MAX 10000 //MAX表示最大节点数

#define INF 10000 //设定两个节点之间不可达的情况下权重为INF

struct edge {

int to,cost; //每条边都有一个目的节点和权重

};

vector es[MAX]; //边的数组元素是以edge为元素的队列

int d[MAX]; //节点i到所有节点的距离

int v,e; //节点个数和边的个数

//构造图

void build()

{

printf("please input the number of vertex and edge\n");

scanf("%d %d",&v,&e);

printf("please input from,to,and cost of all edges\n");

for(int i=0;i

{

int from,to,cost;

edge epair1,epair2;

scanf("%d %d %d",&from,&to,&cost);

epair1.to=to;

epair1.cost=cost;

es[from].push_back(epair1);

epair2.to=from;

epair2.cost=cost;

es[to].push_back(epair2);

}

}

//求得节点s到所有节点的最短路径

void shortest_path(int s)

{

for(int i=0;i

{

d[i]=INF;

}

d[s]=0;

while(true)

{

bool update = false;

for(int i=0;i

{

for(int j=0;j

{

if(d[i]!=INF&&es[i][j].cost+d[i]

{

d[es[i][j].to]=d[i]+es[i][j].cost;

update = true;

}

}

}

if(!update)

{

break;

}

}

}

int main()

{

build();

shortest_path(0);

for(int i=0;i

{

printf("%d ",d[i]);

}

return 0;

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值