2017-11-01 21 views
0

私は与えられた行列からグラフを作成する次のコードを持っています。 得られたグラフには、タイプOとタイプSの2種類のノードがあります。配列内の文字列を検索

B=[0 0 0 0;0 0 1 0;1 1 1 0;0 1 0 0;1 0 1 0;0 1 1 0;0 1 0 1;0 1 0 1;0 0 0 1; 0 0 0 1]; % Example Matrix 
     disp('The Matrix of the system is the following'); 
     display(B);         % Get the system matrix 
     nNodeCol = size(B,2);       % one node for each column of B 
     nNodeLine = size(B,1)/2;       % one node for every two lines of B 
     % First the column nodes, then the line nodes: 
     nodeNames = [cellstr(strcat('O',num2str((1:size(B,2))'))) ; cellstr(strcat('S',num2str((1:size(B,1)/2)')))]; 
    % Adjacency matrix adj, adj(i,j)=1 means there is an edge from node#i to node#j: 
     adj = zeros(nNodeCol+nNodeLine);     % square matrix which size is the number of nodes 
     adj(1:nNodeCol, nNodeCol+1:end) = B(1:2:end,:)'; % edge from a column node to a line node is added for all the 1 in the first line of the node in the matrix 
     adj(nNodeCol+1:end, 1:nNodeCol) = B(2:2:end,:); % edge from the line node to a column node is added for all the 1 in the second line of the node in the matrix 
     % Creation of the graph: 
     G = digraph(adj,nodeNames); 
     for x=1: nNodeCol 
      v{x} = dfsearch(G,nodeNames{x});  % Finding paths from nodes type O . 
     end 
     celldisp(v); 

今、私たちはすべての細胞がタイプOのノード上dfsearchの結果であるノードのセットを含有する配列vを持っている私は、(そうv{1}dfsearch(G,O1)の結果が含まれ、その上に行きます。)私は別の配列を取得したいタイプSのノード数とすべてのW{x}があるサイズnNodeLineを持っているWはの最初の要素が含まれています

v{1}= (O1,S2,O2,S4,S5,S3,O3) 
v{2}= (O2,S2,S4,S5) 
v{3}= (O3,S2,O2,S4,O4,S5,S3) 
v{4}= (O4,S4,O2,S2,S5) 

、私の問題は以下の通りです:次の結果を得ましたv{x}(v{x}{1})であり、Sxは、v{x}の一部である。例えば、w{1}v{x}のすべての最初の要素を含み、S1が含まれます。だから私は次を取得する必要があります:

W{1}= {} 
W{2}= {O1,O2,O3,O4} 
W{3}= {O1,O3} 
W{4}= {O1,O2,O3,O4} 
W{5}= {O1,O2,O3,O4} 

何か提案がありますか?

答えて

0

チェックこの、

for i=1:5 
    ss=['S',int2str(i)]; 
    k=0; 
    for j=1:4 
     if not(isempty(find(strcmp(v{1,j,:},ss)))) 
      w{1,i}{k+1,1}=v{1,j}{1,1}; 
     end 
     k=k+1; 
    end 
    if isempty(w{1,i}) 
     w{1,i}={}; 
    end 
end 

はそれは小さなバグがあり、私は現在、それを修正するために忙しい、それを自分で解決しようとします。あなたができないなら、私は時間があるときに私はそれを修正するコメントで私に教えてください。

+0

@ハゼム......何かバグはありません....もしあなたがそれを修正することができれば....あなたの答えに感謝します。 – StamDad

+0

また、 'ind = find(strcmp(v {1、j、:}、ss));}のポイントは何も使われていないので何ですか? – StamDad

+0

ああ、間違いだったので修正されました。 – Haz

関連する問題