我需要一个matlab脚本,它将在图形中返回最大程度的n个节点 例如:
N = maxnodes(Graph,n)
这是我的源代码(脚本)。但它效果不佳。
M = [0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0;
1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0;
0 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0;
0 0 1 1 0 1 0 0 0 0 0 1 0 0 0 0;
1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0;
1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0;
0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 0;
0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1;
0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0;
0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0;
0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0;
0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0;
0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 1;
0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0;];
n = 5; % The number of nodes that we want
G=[]; % I'll store here the n nodes of maximum degree
for i=1:size(M)
G1(1,i)=sum(M(i,:)); % I'm storing each node with its degree in G1
G1(2,i)=i;
C(1,i)=G1(1,i); %I store only degree of nodes
end
C1 = sort(C,'descend'); % I sort "descendly" the degrees of nodes
for i=1:n %We want to take only the n nodes that we need and save it in C2
C2(1,i) = C1(1,i);
end
C2; % This vector stores the n descend maximum degrees that I need.
%My actual problem is here. How could I find the node that correspond to each degree?
%I tried to do it with the following loop:
for j=1:n
for i=1:size(M)
if C2(1,j) == G1(1,i)
G2(1,j)=G1(2,i);
end
end
end %But this loop doesn't store well the nodes in G2 because it repeats nodes.
G2
答案 0 :(得分:0)
你绝对没有表现出任何努力,所以你实际上不应该得到任何人的任何帮助....但我喜欢图形问题,所以我会给你一块骨头。
我将假设Graph
是adjacency matrix,其中矩阵中的每个元素(i,j)
都对应于两个节点之间连接的边i
和j
。我也假设你有一个无向图作为输入。如果你检查邻接矩阵的性质(维基百科文章有一个很好的例子),不难看出节点i
的程度只是行的所有列的总和。邻接矩阵中的i
。回想一下,度被定义为连接到特定节点的边的总数。因此,您所要做的就是对每行的所有列求和,并确定图中具有最大度数的行。完成此操作后,我们只返回具有最大度数的节点,该节点最多为n
。
但是,如果我们指定n
大于具有此最大程度的节点数,我们将设置一个安全措施,我们将限制它,以便我们只显示这么多节点而不是{{ 1}}。
因此:
n
答案 1 :(得分:0)
这是一个非常有效的脚本,可以解决我的问题。否则,我会很高兴上面的源代码将是调试。
function N = maxnodes(M,n)
nb1_rows= sum(M,2);
[nbs,is] = sort(nb1_rows,'descend');
N = transpose(is(1:n));