code by Vaew, all right reserved
Matlab图论
-
基本概念:有向图,无向图,邻接矩阵,关联矩阵。
-
可达矩阵Matlab实现
%计算图的可达矩阵 function P = dgref(A) n = size(A, 1); P = A %计算矩阵Bn for i = 2:n p = p + A - i; end P(P ~= 0) = 1; %将不为0的元素变为1 P
-
最短路问题
-
通过权值矩阵进行计算
-
DIjkstra算法(边走边搜索)
%两点间最短路的Dijkstra算法 function [d, index1, index2] = Dijkf(a) % a 表示图的权值矩阵 % d 表示所求最短路的权和 % index1 表示标号顶点顺序 % index2 表示标号顶点索引 %参数初始化 M = max(max(a)); pb(1:length(a)) = 0; pb(1) = 1; index1 = 1; index2 = ones(1, length(a)); d(l:length(a)) = M: d(1) = 0: temp = 1 %更新l(v),同时记录顶点顺序和顶点索引 while sum(pb) < length(a) %重复步骤2,直到满足条件 tb = find(pb == 0); d(tb) = min(d(tb), d(temp) + a(temo, tb)); %更新l(v) tmpb = find(d(tb) == min(d(tb))); temp = tb(tmpb(l)); pb(temp) = l; index1 = [index, temp]; %记录标号顺序 index = index1(find(d(index1) == d(temp) - a(temp, index1))); if length(index) >= 2 index = index(1); end index2(temp) = index; %记录标号索引 end d index1 index2
-
Warshall-Floyd算法
function [P u] = f_path(W) % W 表示权值矩阵 % P 表示最短路 % u 表示最短路的权和 %初始化,步骤1 n = length(W); V = W; m =1; %步骤2 while m <= n for i = 1:n for j = 1:n if V(i, j) > V(i, m) + V(m, j) V(i, j) = V(i, m) + V(m, j); end end end m = m + 1; end u = V(1,n); %输出最短路的顶点 p1 = zeros(1,n); k = 1; p1(k) = n; U = ones(1, n) * inf; kk = n; while kk ~= 1 for i = 1:n U(1, i) = V(1, kk) - W(i, kk); if U(1,i) = V(1, i) p1(K + 1) = i; kk = i; k = k + 1; end end end k = 1; wrow = find(p1 ~= 0); for j = length(wrow):(-1):1 p(k) = p1(wrow(j)); k = k + 1; end P
-
判断图的连通性
-
树:
- 基本概念:割点,割边,割集,有序二元树(有方向),Huffman树(带权重)。
- 最小生成树的Kruskal算法步骤
- 选择边使得权重最大;
- 根据已选择的边选择下一个边,使得边与边不成环以及权值最大
- 重复操作
- 最小生成树的Prim算法步骤
- 选择一个点作为顶点;
- 选择与前一个点连着的边,使得边与边不成环以及权值最大
- 重复操作
-
Euler图(平面最优环游)和Hamilton图(立体最优环游)
- Fleury算法步骤(邮递员问题)
- 建立一个值为v0v_0v0的集合W0W_0W0,其中v0v_0v0属于V(E)V(E)V(E);
- 设WiW_iWi已经选定,从E−E-E−{e1,...,eie_1,...,e_ie1,...,ei}中选一条边ei+1e_{i+1}ei+1,其中
- ei+1e_{i+1}ei+1与eie_iei相邻;
- 除非无法选择,否则ei+1e_{i+1}ei+1不是G−G-G−{e1,...,eie_1,...,e_ie1,...,ei}中的边
- 直到步骤二不能进行为止。
- 改良图算法(旅行售货员问题)P96
- Fleury算法步骤(邮递员问题)
-
匹配问题
- 基本概念:匹配,完美匹配,最大匹配;
- 较大基数匹配算法;
- 匈牙利算法(人员分配问题);
- Kuhn-Munkres算法(最优分配算法);
-
网络流问题
- 最大流问题
- 最大流最小割定理:流最大时,路不可增,因此分割最小。
- Ford-Fulkerson标号算法P119
- Dinic算法P122
- 最大流问题
-
-
最小费用流问题
- Busacker-Gowan算法
-
图的染色
- 顶点染色算法
- 边染色算法
- 全染色算法
- 均匀全染色算法
- 邻点可区分全染色算法