dijkstra算法
单源最短路算法Dijkstra 思路:每次寻找距离原点最近的点,通过该点松弛其他的点。 变量 m为边数,n为点数,dis[i]表示从1到点i的最短路径,book[i]表示点1到点i的路程是否最短,e为邻接矩阵,min和u之后才用到 int m, n, dis[N], book[N], e[N][N] min, u; 初始化+读入 读入n,m不再赘述 scanf("%d %d", &n, &m); 一开始所有点都初始化为INF表示互不相连,i==j时自己连向自己,路程为0 //初始化点i到j的距离为INF 自己到自己为0 for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) { if (i == j) e[i][j] = 0; else e[i][j] = INF; } 读入m条边 将数组e[a][b]的值赋值为权重c //读入 for (int i = 1; i <= m; i++) { int a, b, c; scanf("%d%d%d", &a, &b, &c); e[a][b] = c; } 因为e表示i到j的路程,dis表示从1到i的路程。 所以dis[i]初始化时等于e[1][i] 就是 从1到i的路程 (dis[i]) 等于 从1到 i (e[1][i]) 的路程 翻译成人话就是完全一样的东西