图无负环,最短路径算法(Floyd-Warshall,Bellman-Ford算法,MATLAB实现)输出环路,是什么原因 判断一个图是否有负环以及找出负环

\u719f\u6089\u8def\u5f84\u8ba1\u7b97\u65f6\u95f4\u91cc\u89e3

\u5e38\u7528\u7684\u6700\u77ed\u8def\u5f84\u7b97\u6cd5\u6709\uff1aDijkstra\u7b97\u6cd5\u3001Bellman-Ford\u7b97\u6cd5\u3001Floyd-Warshall\u7b97\u6cd5\u3001Johnson\u7b97\u6cd5
\u6700\u77ed\u8def\u5f84\u7b97\u6cd5\u53ef\u4ee5\u5206\u4e3a\u5355\u6e90\u70b9\u6700\u77ed\u8def\u5f84\u548c\u5168\u6e90\u6700\u77ed\u8def\u5f84\u3002
\u5355\u6e90\u70b9\u6700\u77ed\u8def\u5f84\u6709Dijkstra\u7b97\u6cd5\u548cBellman-Ford\u7b97\u6cd5\uff0c\u5176\u4e2dDijkstra\u7b97\u6cd5\u4e3b\u8981\u89e3\u51b3\u6240\u6709\u8fb9\u7684\u6743\u4e3a\u975e\u8d1f\u7684\u5355\u6e90\u70b9\u6700\u77ed\u8def\u5f84\uff0cBellman-Ford\u7b97\u6cd5\u53ef\u4ee5\u9002\u7528\u6743\u503c\u6709\u8d1f\u503c\u7684\u95ee\u9898\u3002
\u5168\u6e90\u6700\u77ed\u8def\u5f84\u4e3b\u8981\u6709Floyd-Warshall\u7b97\u6cd5\u548cJohnson\u7b97\u6cd5\uff0c\u5176\u4e2dFloyd\u7b97\u6cd5\u53ef\u4ee5\u68c0\u6d4b\u56fe\u4e2d\u7684\u8d1f\u73af\u5e76\u53ef\u4ee5\u89e3\u51b3\u4e0d\u5305\u62ec\u8d1f\u73af\u7684\u56fe\u4e2d\u5168\u6e90\u6700\u77ed\u8def\u5f84\u95ee\u9898\uff0cJohnson\u7b97\u6cd5\u76f8\u6bd4Floyd-Warshall\u7b97\u6cd5\uff0c\u6548\u7387\u66f4\u9ad8\u3002
\u7b97\u6cd5\u6027\u80fd\u5206\u6790
\u5728\u5206\u522b\u8bb2\u89e3\u8fd9\u56db\u4e2a\u7b97\u6cd5\u4e4b\u524d\u5148\u6765\u7406\u6e05\u4e0b\u8fd9\u4e2a\u56db\u4e2a\u7b97\u6cd5\u7684\u590d\u6742\u5ea6\uff1aDijkstra\u7b97\u6cd5\u76f4\u63a5\u5b9e\u73b0\u65f6\u95f4\u590d\u6742\u5ea6\u662fO(n²),\u7a7a\u95f4\u590d\u6742\u5ea6\u662fO(n)(\u4fdd\u5b58\u8ddd\u79bb\u548c\u8def\u5f84)\uff0c\u4e8c\u53c9\u5806\u5b9e\u73b0\u65f6\u95f4\u590d\u6742\u5ea6\u53d8\u6210O((V+E)logV)\uff0cFibonacci Heap\u53ef\u4ee5\u5c06\u590d\u6742\u5ea6\u964d\u5230O(E+VlogV)\uff1bBellman-Ford\u7b97\u6cd5\u65f6\u95f4\u590d\u6742\u5ea6\u662fO(V*E)\uff0cSPFA\u662f\u65f6\u95f4\u590d\u6742\u5ea6\u662fO(kE)\uff1bFloyd-Warshall\u7b97\u6cd5\u65f6\u95f4\u590d\u6742\u5ea6\u662fO(n³)\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6\u662fO(n²)\uff1bJohnson\u7b97\u6cd5\u65f6\u95f4\u590d\u6742\u5ea6\u662fO( V * E * lgd(V) )\uff0c\u6bd4Floyd-Warshall\u7b97\u6cd5\u6548\u7387\u9ad8\u3002

\u76fe\u6784\u59cb\u53d1\u65f6\uff0c\u5728\u59cb\u53d1\u7ad6\u4e95\u91cc\u76fe\u6784\u673a\u7684\u540e\u7aef\u662f\u4e00\u4e2a\u53cd\u529b\u67b6\uff0c\u76fe\u6784\u673a\u5411\u524d\u63a8\u8fdb\u65f6\u9700\u62fc\u88c5\u7ba1\u7247\u73af\u5e76\u5411\u540e\u5b89\u88c5\u5230\u4f4d\u4ee5\u7ed9\u76fe\u6784\u673a\u6398\u8fdb\u63d0\u4f9b\u53cd\u4f5c\u7528\u529b\uff0c\u90a3\u4e48\u4ece\u53cd\u529b\u67b6\u5230\u59cb\u53d1\u7ad6\u4e95\u4e95\u58c1\u4e4b\u95f4\u5b89\u88c5\u7684\u7ba1\u7247\u5c31\u662f\u8d1f\u73af\u7ba1\u7247\uff0c\u8d1f\u73af\u7ba1\u7247\u6bb5\u5b9e\u9645\u4e0a\u5168\u90e8\u5728\u59cb\u53d1\u7ad6\u4e95\u4e2d\u3002

\u968f\u7740\u96a7\u6d1e\u6398\u8fdb\u7684\u4e0d\u65ad\u52a0\u6df1\uff0c\u8d1f\u73af\u7ba1\u7247\u5df2\u7ecf\u5b8c\u6210\u4e86\u5176\u4f7f\u547d\u3002\u62c6\u9664\u8d1f\u73af\u7ba1\u7247\u662f\u4e3a\u4e0b\u4e00\u6b65\u4e0b\u653e\u540e\u914d\u5957\u53f0\u8f66\u63d0\u4f9b\u4e95\u4e0b\u65bd\u5de5\u7a7a\u95f4\u3002

§1 Dijkstra算法

Dijkstra算法思想
Dijkstra算法思想为:设G=(V,E)是一个带权有向图(无向可以转化为双向有向),把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径 , 就将 加入到集合S中,直到全部顶点都加入到S中,算法就结束了),第二组为其余未确定最短路径的顶点集合(用U表示),按最短路径长度的递增次序依次把第二组的顶点加入S中。在加入的过程中,总保持从源点v到S中各顶点的最短路径长度不大于从源点v到U中任何顶点的最短路径长度。此外,每个顶点对应一个距离,S中的顶点的距离就是从v到此顶点的最短路径长度,U中的顶点的距离,是从v到此顶点只包括S中的顶点为中间顶点的当前最短路径长度。

Dijkstra算法具体步骤  
(1)初始时,S只包含源点,即S={v},v的距离dist[v]为0。U包含除v外的其他顶点,U中顶点u距离dis[u]为边上的权值(若v与u有边) )或∞(若u不是v的出边邻接点即没有边<v,u>)。
(2)从U中选取一个距离v(dist[k])最小的顶点k,把k,加入S中(该选定的距离就是v到k的最短路径长度)。
(3)以k为新考虑的中间点,修改U中各顶点的距离;若从源点v到顶点u(u∈ U)的距离(经过顶点k)比原来距离(不经过顶点k)短,则修改顶点u的距离值,修改后的距离值的顶点k的距离加上边上的权(即如果dist[k]+w[k,u]<dist[u],那么把dist[u]更新成更短的距离dist[k]+w[k,u])。
(4)重复步骤(2)和(3)直到所有顶点都包含在S中(要循环n-1次)。
╝①

Dijkstra算法实现

直接实现
最简单的实现方法就是,在每次循环中,再用一个循环找距离最短的点,然后用任意的方法更新与其相邻的边,时间复杂度显然为O(n²)
对于空间复杂度:如果只要求出距离,只要n的附加空间保存距离就可以了(距离小于当前距离的是已访问的节点,对于距离相等的情况可以比较编号或是特殊处理一下)。如果要求出路径则需要另外V的空间保存前一个节点,总共需要2n的空间。
╝②


Cpp代码
/*********************************
* 最短路径---Dijkstra算法实现
*    HDU:2544
* BLOG:www.cnblogs.com/newwy
* AUTHOR:Wang Yong
**********************************/
#include <iostream>
#define MAX 100
#define INF 1000000000
using namespace std;
int dijkstra (int mat[][MAX],int n, int s,int f)
{
int dis[MAX];
int mark[MAX];//记录被选中的结点
int i,j,k = 0;
for(i = 0 ; i < n ; i++)//初始化所有结点,每个结点都没有被选中
mark[i] = 0;
for(i = 0 ; i < n ; i++)//将每个结点到start结点weight记录为当前distance
{
dis[i] = mat[s][i];
//path[i] = s;
}
mark[s] = 1;//start结点被选中
//path[s] = 0;
dis[s] = 0;//将start结点的的距离设置为0
int min ;//设置最短的距离。
for(i = 1 ; i < n; i++)
{
min = INF;
for(j = 0 ; j < n;j++)
{
if(mark[j] == 0 && dis[j] < min)//未被选中的结点中,距离最短的被选中
{
min = dis[j] ;
k = j;
}
}
mark[k] = 1;//标记为被选中
for(j = 0 ; j < n ; j++)
{
if( mark[j] == 0 && (dis[j] > (dis[k] + mat[k][j])))//修改剩余结点的最短距离
{
dis[j] = dis[k] + mat[k][j];
}
}
}
return dis[f];
}
int mat[MAX][MAX];
int main()
{
int n,m;
while(scanf("%d %d",&n,&m))
{
int a,b,dis;
if(n == 0 || m == 0)
break;
int i,j;
for(i = 0 ; i < n;i++)
for(j = 0 ; j < n; j++)
mat[i][j] = INF;
for(i = 0 ; i < m ;i++)
{
scanf("%d %d %d",&a,&b,&dis);
--a,--b;
if(dis < mat[a][b] || dis < mat[b][a])
mat[a][b] = mat[b][a] = dis;
}
int ans = dijkstra(mat,n,0,n-1);
printf("%d\n",ans);
}

}
╝⑤

二叉堆实现
使用二叉堆(Binary Heap)来保存没有扩展过的点的距离并维护其最小值,并在访问每条边的时候更新,可以把时间复杂度变成O((V+E)logV)。
当边数远小于点数的平方时,这种算法相对来说有很好的效果。但是当E=O(V2)时(有时候表现为不限制边的条数),用二叉堆的优化反倒会更慢。因为此时的复杂度是O(V+V*2logV),小于不用堆的实现的O(n²)的复杂度。
另外此时要用邻接表保存边,使得扩展边的总复杂度为O(E),否则复杂度不会减小。
空间复杂度:这种算法需要一个二叉堆,及其反向指针,另外还要保存距离,所以所用空间为3V。如果保存路径则为4V。
具体思路:先将所有的点插入堆,并将值赋为极大值(maxint/maxlongint),将原点赋值为0,通过松弛技术(relax)进行更新以及设定为扩展。
╝②


C代码
int GraphDijk(struct Graph *g, int root, int *parent, int *distance)
{
// 将除根结点之外的点都放入堆中,设置所有键为INFINITY
// 遍历根结点发出的边,将其最短路径设为相应权值,并维持堆性质
// RemoveTop,此结点已经取最短路径,如果为INFINITY,则终止算法
// 否则,将其状态设为已标记,并设为根结点
// loop back
parent[root] = root;
int reflection[g->V];
int heap_real[g->V - 1];
for (int i=0,j=0; i < g->V; i++) {
if (i == root) {
distance[i] = 0;
} else {
distance[i] = INFINITY;
heap_real[j++] = i;
reflection[i] = j;
}
}

struct Edge *e;
struct list_t *iter;
int *heap = heap_real - 1;
int base = 0; /* euqal to distance[root] */
int size = g->V - 1;
int length;
do {
iter = list_next(&(g->vertices + root)->link);
for (; iter; iter = list_next(iter)) {
e = list_entry(iter, struct Edge, link);
length = base + e->weight;
if (length < distance[e->to]) {
HeapDecreaseKey(heap, size,
distance, reflection,
reflection[e->to], length);
parent[e->to] = root;
}
}
root = HeapRemoveTop(heap, size, distance, reflection);
base = distance[root];

if (distance[root] == INFINITY) {
/* remain nodes in heap is not accessible */
return g->V - (size + 1); /* 返回强连通分支结点数 */
}
} while (size);

/* successfull end algorightm */
return g->V;
}
╝④
再献上一个实现


C代码
/*很裸很水的最短路,练习二叉堆优化的Dijstra~

之前二叉堆优化的Prim敲了好几遍前后花了不下八个小时调试还是没有调试成功,
但是还好,熟悉了优先队列的操作。

十几天后的今天重新想起这个,终于调出来了堆优化的Dijstra。理解之后还是蛮简单的。

一些写法并不是最优的,例如heap的实现中可以减少交换元素等。但是有这个自己写的AC
过的Dijkstra在,以后写二叉堆优化的Prim/Dijkstra和其它优先队列的题目就可以拿它对照着Debug了。

2011-07-24 23:00
*/

#include <stdio.h>

#define MAXN 1200
#define MAXM 1200000
#define INF 19930317

struct node
{
int d, v, p;
}heap[MAXN];
int pos[MAXN], hl;

int e[MAXM], cost[MAXM], next[MAXM], g[MAXN], size;

int m, n, s, t;

void insert(int u, int v, int w)
{
e[++size] = v;
next[size] = g[u];
cost[size] = w;
g[u] = size;
}

void swap(int a, int b)
{
heap[0] = heap[a];
heap[a] = heap[b];
heap[b] = heap[0];
pos[heap[a].v] = a;
pos[heap[b].v] = b;
}

void heapfy()
{
int i = 2;
while (i <= hl)
{
if ((i < hl) && (heap[i + 1].d < heap[i].d))
i++;
if (heap[i].d < heap[i >> 1].d)
{
swap(i, i >> 1);
i <<= 1;
}
else
break;
}
}

void decrease(int i)
{
while ((i != 1) && (heap[i].d < heap[i >> 1].d))
{
swap(i, i >> 1);
i >>= 1;
}
}

void relax(int u ,int v, int w)
{
if (w + heap[pos[u]].d < heap[pos[v]].d)
{
heap[pos[v]].p = u;
heap[pos[v]].d = w + heap[pos[u]].d;
decrease(pos[v]);
}
}

void delete_min()
{
swap(1, hl);
hl--;
heapfy();
}

void init()
{
int u ,v ,w, i;

scanf("%d%d", &m, &n);
for (i = 1; i <= m; i++)
{
scanf("%d%d%d", &u, &v, &w);
insert(u, v, w);
insert(v, u, w);
}
s = 1;
t = n;
}

int dijkstra()
{
int u, p, i;

for (i = 1; i <= n; i++)
{
heap[i].v = pos[i] = i;
heap[i].d = INF;
}
heap[s].p = s;
heap[s].d = 0;
swap(1, s);
hl = n;
while (hl)
{
u = heap[1].v;
delete_min();
p = g[u];
while (p)
{
if (pos[e[p]] <= hl)
relax(u, e[p], cost[p]);
p = next[p];
}

}
}
int main()
{
init();
dijkstra();
printf("%d\n", heap[pos[t]].d);
return 0;
}
╝③

菲波那契堆实现
用类似的方法,使用Fibonacci Heap可以将复杂度降到O(E+VlogV),但实现比较麻烦。因此这里暂不列举。

  • 鍥炬棤璐熺幆,鏈鐭矾寰勭畻娉(Floyd-Warshall,Bellman-Ford绠楁硶,MATLAB瀹炵幇)杈...
    绛旓細Dijkstra绠楁硶鎬濇兂涓:璁綠=(V,E)鏄竴涓甫鏉冩湁鍚鍥(鏃鍚戝彲浠ヨ浆鍖栦负鍙屽悜鏈夊悜),鎶婂浘涓《鐐归泦鍚圴鍒嗘垚涓ょ粍,绗竴缁勪负宸叉眰鍑鏈鐭矾寰鐨勯《鐐归泦鍚(鐢⊿琛ㄧず,鍒濆鏃禨涓彧鏈変竴涓簮鐐,浠ュ悗姣忔眰寰椾竴鏉℃渶鐭矾寰 , 灏卞皢 鍔犲叆鍒伴泦鍚圫涓,鐩村埌鍏ㄩ儴椤剁偣閮藉姞鍏ュ埌S涓,绠楁硶灏辩粨鏉熶簡),绗簩缁勪负鍏朵綑鏈‘瀹氭渶鐭矾寰勭殑椤剁偣闆嗗悎(...
  • Floyd绠楁硶鍘熺悊鍙婂叕寮忔帹瀵
    绛旓細绠楁硶娴佺▼锛氬湪涓夊眰寰幆涓紝棣栧厛鍒濆鍖栦竴涓煩闃垫潵瀛樺偍鏈鐭矾寰勶紝鐒跺悗鍦ㄦ瘡涓娆″惊鐜腑锛屽皢k鐨勫间粠0鍒拌妭鐐规绘暟-1閬嶅巻锛屾瘡涓娆¤凯浠i兘浼氬鎵鏈夊彲鑳界殑鑺傜偣瀵硅繘琛岃窛绂绘洿鏂般備笅闈紝璁╂垜浠忚繃Python浠g爜绐ヨFloyd绠楁硶鐨勫唴鏍革細class FloydShortestPath: def __init__(self, graph, num_nodes, path_max): s...
  • 鏈鐭矾寰鐨刦loyd绠楁硶鐨勬椂闂村鏉傚害
    绛旓細Floyd锛氭瘡瀵硅妭鐐逛箣闂寸殑鏈鐭矾寰銆侳loyd-Warshall绠楁硶锛團loyd-Warshall algorithm锛夋槸瑙e喅浠绘剰涓ょ偣闂寸殑鏈鐭矾寰勭殑涓绉嶇畻娉曪紝鍙互姝g‘澶勭悊鏈夊悜鍥炬垨璐熸潈鐨勬渶鐭矾寰勯棶棰橈紝鍚屾椂涔熻鐢ㄤ簬璁$畻鏈夊悜鍥剧殑浼犻掗棴鍖呫侳loyd-Warshall绠楁硶鐨勬椂闂村鏉傚害涓篛(N3)锛岀┖闂村鏉傚害涓篛(N2)銆侱ijkstra锛 O(n2) 閫傜敤浜 鏉冨间负...
  • 鍏ㄦ簮鏈鐭矾寰鐨凢loyd绠楁硶涓轰粈涔堜笉鑳芥湁璐熺幆
    绛旓細鍥犱负绛変綘涓鍦堣浆涓嬫潵锛屾潈鍊煎彉寰楁洿灏戜簡锛屽啀杞竴鍦堢户缁噺灏戯紝鑷劧涓嶈兘鏈璐熺幆浜
  • 鐔熸倝璺緞璁$畻鏃堕棿閲岃В
    绛旓細鍗曟簮鐐规渶鐭矾寰勬湁Dijkstra绠楁硶鍜孊ellman-Ford绠楁硶锛鍏朵腑Dijkstra绠楁硶涓昏瑙e喅鎵鏈夎竟鐨勬潈涓洪潪璐熺殑鍗曟簮鐐鏈鐭矾寰勶紝Bellman-Ford绠楁硶鍙互閫傜敤鏉冨兼湁璐熷肩殑闂銆傚叏婧愭渶鐭矾寰勪富瑕佹湁Floyd-Warshall绠楁硶鍜孞ohnson绠楁硶锛屽叾涓璅loyd绠楁硶鍙互妫娴嬪浘涓殑璐熺幆骞跺彲浠ヨВ鍐充笉鍖呮嫭璐熺幆鐨勫浘涓叏婧愭渶鐭矾寰勯棶棰橈紝Johnson绠楁硶鐩告瘮...
  • 姹傝В:鍥捐涓父瑙佺殑鏈鐭矾寰勭畻娉鏈夊嚑绉?閮芥槸浠涔?
    绛旓細绗竴绉嶆槸鏈鐩存帴鐨勮椽蹇僤ijkstra绠楁硶銆併佸彲浠ュ埄鐢ㄥ爢鏁版嵁缁撴瀯杩涜浼樺寲銆併佺己鐐瑰氨鏄笉鑳芥眰鏈夎礋鏉冪殑鏈鐭矾涓庡垽鏂璐熺幆銆併佺浜岀鏄痓ellman-ford绠楁硶銆併佹牴鎹澗寮涙搷浣滅殑鎬ц川鏄彲浠ユ潵鍒ゆ柇璐熺幆鐨勩併佹椂闂村鏉傚害鏄疧(nm)鐨勩併佺涓夌鏄疭PFA绠楁硶銆併佹妸浠栧崟鐙嬁鍑烘潵浣滀负涓绉嶇畻娉曞苟涓嶆槸闈炲父濂界殑銆併佷粬鐨勫疄璐ㄥ簲璇ユ槸...
  • 璇风畝杩伴泦涓紡鏈鐭矾寰勭畻娉涓殑Bellman-Ford绠楁硶銆
    绛旓細Bellman-Ford 绠楁硶鏄湪 1955 骞村乏鍙筹紙鏃堕棿涓婃瘮Dijkstra绠楁硶杩樻棭鍑犲勾锛夛紝鐢 Bellman 鍜 Ford 鍚屾椂鍒嗗埆鍙戠幇锛屽鏋滃崟鏄В鍐宠礋鏉冭竟鐨勯棶棰橈紝鏈変竴绉嶆瘮杈冨熀鏈畝鍗曠殑鎬濇兂锛屽氨鏄皢杈瑰叏閮ㄦ嫇鎵戞帓搴忎竴涓嬶紝鐒跺悗鎸夋搴忔壂鎻忎竴閬嶏紝涓嶆柇灏嗙洰鍓鏈鐭矾鎬绘潈鍊兼洿鏂板嵆鍙備笉杩囷紝蹇呴』鏄湁鍚鏃犵幆鍥炬墠鑳借繘琛屾嫇鎵戞帓搴忥紝閭e鏋滃瓨鍦...
  • 鍏充簬Dijkstra绠楁硶鍜孎loyd绠楁硶
    绛旓細Dijkstra 绠楁硶 鍦ㄧ綉缁滀腑鐢ㄥ緱澶氾紝涓涓竴涓妭鐐规坊鍔狅紝鍔犱竴涓偣鍒蜂竴娆¤矾鐢辫〃銆傘侳loyd 绠楁硶 锛氭妸鎵鏈夊凡缁忚繛鎺ョ殑璺緞閮芥爣鍑烘潵锛屽啀閫氳繃涓嶇瓑寮忔瘮杈冩潵鏇存敼璺緞銆傚疄鐜拌繃绋嬩笉澶浉鍚屻傘傚墠涓涓槸鐢ㄥ湪澶х綉缁滀腑锛屽鑺傜偣鏁扮洰鍜屽叿浣撹繛鎺ヤ笉浜嗚В鏃跺欎娇鐢紝鍚庨潰鏄讳綋鎶婃彙浜嗭紝鍐嶅鍚勮繛鎺ュ叿浣撹矾寰勮繘琛屼慨姝c傘
  • SPFA绠楁硶
    绛旓細瀵逛簬鍙湁姝f潈杈圭殑鍥撅紝SPFA鐢氳嚦姣擠ijkstra绠楁硶鏇磋儨涓绛广璐熺幆鍒ゆ柇SPFA鍦ㄥ垽鍒礋鐜柟闈㈠悓鏍峰緱蹇冨簲鎵嬨傚湪鏇存柊杩囩▼涓紝缁存姢涓涓褰鏈鐭矾寰杈规暟鐨勬暟缁勩傚鏋滄渶鐭矾寰勮竟鏁拌秴杩囧疄闄呰妭鐐规暟鍑忎竴锛岃〃鏄庡瓨鍦鐜紝涓旂敱浜嶴PFA鐨勬洿鏂拌鍒欙紝杩欎釜鐜繀鐒舵槸璐熺幆銆傚垵濮嬫椂锛屾墍鏈夎妭鐐归兘浼氳鏀惧叆闃熷垪锛屼互纭繚涓嶄細閿欒繃璐熺幆銆傛...
  • 鏁版嵁缁撴瀯涓,鏈鐭矾寰涓瀹氭槸绠鍗曡矾寰勫悧?涔熷氨鏄:鏈鐭矾寰勪腑鑳戒笉鑳藉嚭鐜...
    绛旓細鏈鐭矾寰涓笉浼氬嚭鐜扮幆璺
  • 扩展阅读:扫一扫题目出答案 ... 初二最短路径例题图解 ... 负压对照表 ... 真空负压表怎么看度数 ... 最短路径的五种画法 ... 五点作图法步骤表格 ... 返点的计算公式 ... 最短路径弗洛伊德算法 ... 万能表使用方法(图解) ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网