Matleb 学習 -- グラフ理論の最短経路問題

1.グラフ理論:

グラフ理論は数学の一分野です。研究対象となる写真を撮影します。グラフ理論におけるグラフは、与えられた多数の点と 2 つの点を結ぶ線で構成されるグラフです。このグラフは通常、特定の物事の間の特定の関係を記述するために使用されます。点は物事を表し、点は 2 つの点を結びます。線は表現します対応する 2 つの物事の間にはそのような関係があるということです。グラフ理論には、有向グラフ無向グラフという
2 種類のグラフがあります名前のとおり、2 点を結ぶ線に矢印があるかどうかを示します。私の考えでは、無向グラフも有向グラフの一種ですが、有向グラフの 2 点を結ぶ線は双方向の矢印です。

2. 2 つの描画方法:

  1. ウェブサイトのオンライン描画 (推奨)クリックしてウェブサイトに入ります
    ウェブサイトに入った後のインターフェースは次のとおりです:
    ここに画像の説明を挿入まず、必要な機能について説明します
ノード数: 点の数、つまり右側の円の数を設定します。
グラフデータ: 1 列の数値は円内の点の数を書き込みます (1 列の数値の合計はノード数です)。2 列の数値は円間の関係を決定するためのものです。これを増やすこともできます。 3 つの列に変更する、つまり重量を増やすには、以下の具体的なデモを参照してください。
0(1)-インデックス 円内の最小の数字は 0 (1) から始まります
PNG としてダウンロード 画像としてエクスポート
無指向性(有向性) 無向グラフ (有向グラフ)

次にいくつかの関数を説明します
**1 列の数値関数とノード数との関係
ここに画像の説明を挿入
**2 列の数値関数 (スペースに注意してください)
ここに画像の説明を挿入
**加重グラフ理論の追加
ここに画像の説明を挿入ここに画像の説明を挿入
**矢印を使用したグラフ理論
ここに画像の説明を挿入

  1. Matleb の描画
    まずコードをアップロードします。コードが理解できれば、直接 3 番目の部分に進むことができます。(コードは Qingfeng 氏からのものです。侵害のため削除される可能性があります)
%% Matlab作无向图
% (1)无权重(每条边的权重默认为1)
% 函数graph(s,t):可在 s 和 t 中的对应节点之间创建边,并生成一个图
% s 和 t 都必须具有相同的元素数;这些节点必须都是从1开始的正整数,或都是字符串元胞数组。
s1 = [1,2,3,4];
t1 = [2,3,1,1];
G1 = graph(s1, t1);
plot(G1)
% 注意哦,编号最好是从1开始连续编号,不要自己随便定义编号

% 注意字符串元胞数组是用大括号包起来的哦
s2 = {
    
    '学校','电影院','网吧','酒店'};
t2 = {
    
    '电影院','酒店','酒店','KTV'};
G2 = graph(s2, t2);
plot(G2, 'linewidth', 2)  % 设置线的宽度
% 下面的命令是在画图后不显示坐标
set( gca, 'XTick', [], 'YTick', [] );  

% (2)有权重
% 函数graph(s,t,w):可在 s 和 t 中的对应节点之间以w的权重创建边,并生成一个图
s = [1,2,3,4];
t = [2,3,1,1];
w = [3,8,9,2];
G = graph(s, t, w);
plot(G, 'EdgeLabel', G.Edges.Weight, 'linewidth', 2) 
set( gca, 'XTick', [], 'YTick', [] );  

%% Matlab作有向图
% 无权图 digraph(s,t)
s = [1,2,3,4,1];
t = [2,3,1,1,4];
G = digraph(s, t);
plot(G)
set( gca, 'XTick', [], 'YTick', [] );  

% 有权图 digraph(s,t,w)
s = [1,2,3,4];
t = [2,3,1,1];
w = [3,8,9,2];
G = digraph(s, t, w);
plot(G, 'EdgeLabel', G.Edges.Weight, 'linewidth', 2) 
set( gca, 'XTick', [], 'YTick', [] );  

機能説明

グラフ(s,t) s と t の対応するノードとグラフの間にエッジを作成できます。
グラフ(s、t、w) s と t の対応するノード間に重み w のエッジを作成し、グラフを生成できます

他のコード コメントも詳しく説明されています。コードの実践を参照してください。

3. 重み隣接行列

重み隣接行列とはグラフ理論を行列で表現したもので、自分と自分との関係は0、自分と他者との関係は無限(Inf)であり、その関係が重みとなります。グラフ理論によれば、重み隣接行列は、有向グラフの重み隣接行列と無向グラフの重み隣接行列に分けることもできます。両者の間の主対角要素はゼロであり、Dij は i 番目のノードから j 番目のノードまでの重みを表します。違いは、無向グラフは対称行列であるのに対し、有向グラフは一般に対称行列ではないことです。最後の 2 枚の写真は百聞は一見に如かずです。
ここに画像の説明を挿入ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/Fireworkyanhuo/article/details/107305872