matlab自带的biography(产生一个句柄) 能够用于画图node
R=[1 1 2 4 1 2 3 3 5 7 3 4 5 6 7 8]; % 起始节点编号 C=[2 3 3 3 4 5 5 6 6 6 7 7 8 8 8 7]; % 起始节点可链接的节点编号 W=[2 8 6 7 1 1 5 1 3 4 2 9 8 6 3 0]; %权重 G=sparse(R,C,W); %产生稀疏矩阵 view(biograph(G,[],'ShowW','ON')); %‘ShowW' ‘ON' 表示显示权值 ,'ShowArrows' ‘ON’为显示箭头。 graphallshortestpaths(G) %返回G的全部最短路径,以矩阵形式返回
这里面R和C分别表示节点坐标x,y的标量,W表示对应两节点之间的边权值。算法
sparse函数会生成一个m*n的double型矩阵,m是R中最大的数字,n是C中最大的数字。ide
注意:若是m与n不相等,那么生成的矩阵将不是方阵,而全部的图论算法操做的矩阵都须要是方阵,因此在R和C和W的最后填补了8 7 0三个数字,来保证生成方阵,同时w=0,加权为0保证不影响结果。函数
路径矩阵 第一行表明第一个节点 第m列表明第一个节点到第m个节点的距离 相似的 第二行第二列表明第二个节点到第二个节点的距离为0 spa
无向图code
R=[1 1 2 4 1 2 3 3 5 7 3 4 5 6 7 8]; % 起始节点编号 C=[2 3 3 3 4 5 5 6 6 6 7 7 8 8 8 7]; % 起始节点可链接的节点编号 W=[2 8 6 7 1 1 5 1 3 4 2 9 8 6 3 0]; %权重 G=sparse(R,C,W); %产生稀疏矩阵 view(biograph(G,[],'ShowW','ON','ShowArrows','off')); %‘ShowW' ‘ON' 表示显示权值 ,'ShowArrows' ‘ON’为显示箭头。 graphallshortestpaths(G+G') %无向图的最短路径,则将稀疏矩阵与其转置相加
无向图的距离矩阵blog
求两点见最短路径为[dist path]=graphshortestpath(G,v1,v2)get
v1,v2为两点。返回的dist为路径长,path为路径。io
举例 [dist path]=graphshortestpath(G,1,8)class
R=[1 1 2 4 1 2 3 3 5 7 3 4 5 6 7 8]; % 起始节点编号 C=[2 3 3 3 4 5 5 6 6 6 7 7 8 8 8 7]; % 起始节点可链接的节点编号 W=[2 8 6 7 1 1 5 1 3 4 2 9 8 6 3 0]; %权重z G=sparse(R,C,W); %产生稀疏矩阵 graphallshortestpaths(G+G') %无向图的最短路径,则将稀疏矩阵与其转置相加 h=view(biograph(G,[],'showW','on')); %‘ShowW' ‘ON' 表示显示权值 ,'ShowArrows' ‘ON’为显示箭头。 edges=getedgesbynodeid(h,get(h.Nodes(path),'ID')); %获取边缘线句柄 set(h.Nodes(path),'color',[1 0 0]) %节点涂色为哄 set(edges,'LineColor',[1 0 0]) %链接线变成红色 set(edges,'LineWidth',1.5) %链接线加粗
最小生成树
R=[1 1 2 4 1 2 3 3 5 7 3 4 5 6 7 8]; % 起始节点编号 C=[2 3 3 3 4 5 5 6 6 6 7 7 8 8 8 7]; % 起始节点可链接的节点编号 W=[2 8 6 7 1 1 5 1 3 4 2 9 8 6 3 0]; %权重z G=sparse(R,C,W); %产生稀疏矩阵 G=G+G'; %此处G需为无向图,即原稀疏矩阵与其转置之和 [ST,pred] = graphminspantree(G); view(biograph(ST,[],'ShowArrows','off','ShowWeights','on'))