链路状态算法(LS)
1.问题描述
输入:网络拓扑和链路开销
输出:每个节点的到其他节点的最低开销以及路径(这里简化为只求最低开销也就是dijkstra算法)
2.思路
- 迭代次数:经过k次迭代之后,可以知道k个目的节点的最短开销路径
- 变量说明
distance(i):到算法本次迭代,从源节点到目的节点i的最低开销路径
min_node 目前已知的到源节点的路径中,距离源节点最近的节点
vist记录目前已经访问过的节点 - 计算步骤
- 首先找与开始节点最近的点 min_node
- 然后更新最短路径。如果目的节点经过min_node 到达源节点更近,那就更新目的节点的最短路径
- 迭代n次
3.代码
// LS.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <vector>
#include <algorithm>
#define N 6
#define None 9999
#define NOREACH 9999
using namespace std;
//输入为点的关系以及出发点
//输出为出发点到各点的最短路径
vector<int> LS(vector<vector<int>>& graph, int start)
{
vector<int> visit(N, 0); //定义访问的数组,记录已经访问过哪些节点,0表示未访问,1表示已经访问过
vector<int> distance(N, NOREACH);//定义最短路径数组,记录目前已经访问过的节点距离起始点的最短路径
// visit[start] = 1; //先把起始节点标记为访问过
distance[start] = 0; //起始点距离起始点的距离为0
//循环N次,依次遍历每一个节点
for(int j=0;j<N;j++)
{
int