用Matlab打印最大次数n个节点

用Matlab打印最大次数n个节点,matlab,graph,Matlab,Graph,我需要一个matlab脚本,它将返回图中最大次数的n个节点。 例如: N = maxnodes(Graph,n) 图是一个矩阵 n我们需要的节点数 N是表示N个节点的向量。 这是我的源代码脚本。但效果不好。 你完全没有表现出任何努力,所以你实际上不应该从任何人那里得到任何帮助。。。。但我喜欢图形问题,所以我要给你一根骨头 我假设图是,矩阵中的每个元素I,j对应于两个节点I和j之间连接的边。我还假设有一个无向图作为输入。如果你研究一下维基百科文章中有一个很好的例子的邻接矩阵的性质,不难看出节点

我需要一个matlab脚本,它将返回图中最大次数的n个节点。 例如:

N = maxnodes(Graph,n)
图是一个矩阵 n我们需要的节点数 N是表示N个节点的向量。 这是我的源代码脚本。但效果不好。


你完全没有表现出任何努力,所以你实际上不应该从任何人那里得到任何帮助。。。。但我喜欢图形问题,所以我要给你一根骨头

我假设图是,矩阵中的每个元素I,j对应于两个节点I和j之间连接的边。我还假设有一个无向图作为输入。如果你研究一下维基百科文章中有一个很好的例子的邻接矩阵的性质,不难看出节点i的阶数就是邻接矩阵中第i行所有列的和。回想一下,度定义为连接到特定节点的边的总数。因此,您所要做的就是对每行的所有列求和,并确定图形中度数最大的行。一旦我们这样做了,我们只需返回次数最大的节点,即n

但是,我们将设置一个保护措施,如果我们指定n大于具有此最大次数的节点数,我们将对其进行限制,以便只显示这么多节点,而不是n

因此:

function [N] = maxnodes(Graph, n)

%// Find degrees of each node
degs = sum(Graph, 2);

%// Find those nodes that have the largest degree
locs = find(degs == max(degs));

%// If n is larger than the total number of nodes
%// having this maximum degree, then cap it
if n > numel(locs)
    n = numel(locs);
end

%// Return those nodes that have this maximum degree
N = locs(1:n);

这是一个非常好的脚本,它解决了我的问题。否则,我很希望我上面的源代码是调试的

function N = maxnodes(M,n)
nb1_rows= sum(M,2); 
[nbs,is] = sort(nb1_rows,'descend');
N = transpose(is(1:n));

M不是邻接矩阵。下面是我将要使用的一个图矩阵的示例。M=[0 1 0 1;0 0 1;1 1 0 1;1 0 1 0]所以M是一个连接矩阵。@nass-为什么不更新你问题中的信息呢?你至少可以说谢谢你的努力,因为你显然没有表现出任何努力。你知道,我不是一个读心术的人。我不会继续回答你的问题,我怀疑其他人也不会。玩得高兴我确实做了一些努力,但是我有一些困难来发布我自己的代码,以便有人帮助我调试它。@nass-你知道连接矩阵和邻接矩阵是一样的吗。显然,您不知道自己在说什么。您确实意识到,这与我提供给您的脚本几乎相同,只是您将节点从最高到最低排序,这从您的问题描述中是有误导性的。我的脚本返回与图形中的最大度匹配的节点。哦,好吧。请接受您的回答,向社区发出信号,表示您不再需要帮助。
function N = maxnodes(M,n)
nb1_rows= sum(M,2); 
[nbs,is] = sort(nb1_rows,'descend');
N = transpose(is(1:n));