作业帮 > 综合 > 作业

图论算法matlab实现问题

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/07/03 13:32:01
图论算法matlab实现问题
怎么用matlab把邻接矩阵F=[0 1 1 1;1 0 1 1;1 1 0 1;1 1 1 0];转为关联矩阵
求算法.
参考楼上给的链接,稍微做了一点修改,供参考.

修改的地方包括:
1、原程序为函数,提供了邻接矩阵和关联矩阵的双向转换,这里针对楼主的需求改为脚本,直接运行即可将邻接矩阵转为关联矩阵.
2、部分语句修改更符合MATLAB的通行写法,如:
sum(sum(F))改为sum(F(:)),
W(i,k)=1; W(j,k)=1;改为W([i j],k)=1;
3、考虑到邻接矩阵为对称阵,第二个for循环改为只针对半个矩阵,减少计算量(对于楼主的这个具体作用微乎其微).
4、原程序有错误,在else分支fprint为fprintf之误(其实我看到该程序的第一眼就注意到了这个错误,担心还存在其它问题,所以进行了改写).

F=[0 1 1 1;1 0 1 1;1 1 0 1;1 1 1 0]; % 邻接矩阵
m = sum(F(:))/2; % 图的边数
n = size(F,1); % 顶点数

W = zeros(n,m);
k=1;
for i = 1:n
for j = 1:i
if F(i,j)~=0
W([i j],k)=1;
k = k + 1;
end
end
end
W
再问: 谢啦。。。回答是对的但弱弱的问一下刚刚那条代码怎么改??还是我运行错了???
再答: 看图中你是把函数的代码直接贴到命令窗口里面运行了,这是不允许的。 函数(function)必须保存成文件(例如保存成incandadf),然后在命令窗口调用(例如,如果在命令窗口中已经定义了F,则可以使用incandadf(F,0)调用)。 脚本(script)可以直接贴到命令窗口中运行(例如我贴的改写后的代码),但是如果代码比较长,最好还是先保存成文件再运行。