Matlab 有向有环图 所有回路非回路查询 最大环路查询
来源:互联网 发布:跳跃网络平台 编辑:程序博客网 时间:2024/06/01 07:24
1.查看拓扑结构 mat文件为邻接矩阵
%%% ShuanHolmes@outlook.com% 有向图绘制 拓扑情况%%%close all;clear;clc;% load('wMatTree.mat');% load('woutMat.mat');load('wMatWsparity.mat');W = full(W);W = W';% W = [W Wout'];% Wback = [Wback;0];% W = [W;Wback'];%load('xMat.mat');%netplot(W,1); %IDS={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T'}; %IDS={'A','B','C','D','E','F','G','H','I','J'}; n = size(W,1); % W是一个方阵 IDS = {}; for i=1:n IDS = [IDS;num2str(i)]; % 节点标号 增加了一个反馈节点 end % A G J H I C % 1 7 10 8 9 3 %W = W - diag(diag(W)-diag(0)); bg=biograph(W,IDS); set(bg.nodes,'shape','circle','color',[1,1,1],'lineColor',[0,0,1]); %set(bg,'layoutType'); set(bg,'layoutType'); bg.showWeights='on'; set(bg.nodes,'textColor',[0,0,0],'lineWidth',2,'fontsize',9); set(bg,'arrowSize',7,'edgeFontSize',9); get(bg.nodes,'position'); dolayout(bg);% bg.nodes(1).position=[0,0];% bg.nodes(2).position=[0,40];% bg.nodes(3).position=[0,80];% bg.nodes(4).position=[0,120];% bg.nodes(5).position=[60,0];% bg.nodes(6).position=[40,40];% bg.nodes(7).position=[60,80];% bg.nodes(8).position=[60,120];% bg.nodes(9).position=[120,0];% bg.nodes(10).position=[120,80];% bg.nodes(11).position=[120,80];% bg.nodes(12).position=[120,120];% bg.nodes(13).position=[180,0];% bg.nodes(14).position=[180,40];% bg.nodes(15).position=[180,80];% bg.nodes(16).position=[180,120];% bg.nodes(17).position=[240,0];% bg.nodes(18).position=[240,40];% bg.nodes(19).position=[240,80];% bg.nodes(20).position=[240,120]; dolayout(bg,'pathsonly',true); view(bg); help biograph;
2.DFS 环路查找及非环路查找 main
%%% ShuanHolmes@outlook.com% 有向图中所有的环路 %%clc;clear;% diary('log.txt');% diary on;load('wMatWsparity.mat');W = full(W);x = size(W,1);for i = 1:x RouteWalked = []; CalcCircleFun(W,i,RouteWalked);end% diary off;
2.2DFS 环路查找及非环路查找 Function
%%% ShuanHolmes@outlook.com% 有向图中所有的环路及非环路打印% 深度优先 DFS%%function [] = CalcCircleFun(Mat, layer, RouteWalked) if isempty(find(Mat(:,layer) ~= 0)) % disp('无环路情况:'); % 出度为0 终止查询 TmpRoute = RouteWalked; TmpRoute = [TmpRoute;layer]; CalcCircleSaveDialogData(TmpRoute,'NoCircle.txt'); return; end [x,y] = size(Mat); % mat是一个方阵 for i = 1:x % 遍历所有出度 TmpRoute = RouteWalked; if Mat(i,layer) ~= 0 % 说明存在出度 index = find(TmpRoute == i); if isempty(index) % 存在出度且不存在环路 继续查询 TmpRoute = [TmpRoute;layer]; % 存在出度则可以将当前节点加入队列 CalcCircleFun(Mat, i, TmpRoute) else % disp('环路情况:'); % 存在出度但是存在环路 终止查询 TmpRoute = [TmpRoute;layer]; CalcCircleSaveDialogData(TmpRoute,'CircleWithoutLastPoint.txt'); TmpRoute = [TmpRoute;i]; CalcCircleSaveDialogData(TmpRoute,'Circle.txt'); end end endend2.3DFS 环路查找及非环路查找 转移到外存中
%%% ShuanHolmes@outlook.com% 将屏幕显示结果存入日志文件%%function [] = CalcCircleSaveDialogData( Array , filename) fid=fopen(filename,'a+'); length = size(Array); length = max(length); fprintf(fid, '\r\n'); for i=1:length fprintf(fid, '%d ', Array(i)); end fclose(fid);end3.显示最大环路
%%% ShuanHolmes@outlook.com% 查看最长环路%%clc;clear;fid=fopen('Circle.txt','r');CircleResult = {};LenCircleResult = [];i = 1;while ~feof(fid) % 判断是否为文件末尾 tline=fgetl(fid); if ~isempty(tline) nline = str2num(tline); if nline(1) == nline(end) CircleResult(i) = cellstr(tline); LenCircleResult(i) = size(nline,2); i = i + 1; end endendfclose(fid);index = find(LenCircleResult == max(LenCircleResult));MaxCircle = {};j = 1;for i = 1:max(size(index)) CompareResult = strcmp(MaxCircle,CircleResult(index(i))); if isempty(find(CompareResult == 1)) MaxCircle(j) = CircleResult(index(i)); j = j + 1; endendMaxCircle%%% 查看所有环路AllCircle = {};j = 1;for i = 1:max(size(CircleResult)) CompareResult = strcmp(AllCircle,CircleResult(i)); if isempty(find(CompareResult == 1)) AllCircle(j) = CircleResult(i); j = j + 1; endendAllCircle = cellstr(AllCircle);Statistic = zeros(1,20);for i = 1:max(size(AllCircle)) nline = str2num(cell2mat(AllCircle(i))); for j = 1:size(nline,2) Statistic(nline(j)) = Statistic(nline(j)) + 1; endendStatistic
0 0
- Matlab 有向有环图 所有回路非回路查询 最大环路查询
- 有向图欧拉回路
- 判断有向图回路
- 判断有向图回路
- 判断无向图是否有回路
- 单源最短路径算法(有向无回路)
- 判断无向图是否有回路
- 单源最短路径算法(有向无回路) .
- 有向图欧拉回路--try,yes,sad。。。
- 拓扑法判断有向图回路
- 有向无回路图的理解
- 【NPC】10、无向汉密尔顿回路规约到有向汉密尔顿回路
- 【NPC】23、有向汉密尔顿回路规约到无向汉密尔顿回路
- 欧拉路 / 回路 / 有向/ 无向 / 字典顺序
- 拓扑排序(判断有向图是否有回路)
- 拓扑排序(判断有向图是否有回路)
- 拓扑排序(判断有向图是否有回路)
- 无向图欧拉回路
- asp.net连接多个数据库
- Android中内存泄漏和内存溢出
- Ubuntu下截屏工具gnome-screenshot的使用
- java中Date与String的相互转化
- Redis本地环境搭建
- Matlab 有向有环图 所有回路非回路查询 最大环路查询
- python注释
- HTTP Error 500.19 错误 0x80070021
- 范式
- 【bzoj2466】【中山市选】【树】【高斯消元+dfs】
- R语言︱非结构化数据处理神器——rlist包
- Java设计模式之代理初探
- 子容器居中显示在父容器中
- Toolbar 实践