function r=Ullmann(a,b)
%Ullmann算法:子图同构算法中最简单的一种
%判断图b中是否有子图同构于a
%a和b是图的邻接布尔矩阵
%返回0代表没有找到,1代表找到了.
%p1和p2代表a和b的阶
[p1,tmp]=size(a);
[p2,tmp]=size(b);
%ab必须都是方阵
%p1<=p2
%d是degree的意思
%用来存储每个顶点的度
da=sum(a);
db=sum(b);
%对角线假定都是0
%a,b必须对称
%m是a与b的关联矩阵
%这是一个p1*p2的布尔矩阵
%其元素m(i,j)表示a的第i个节点和b的第j个节点是否对应
%因此这个矩阵的限制为:
%每行有且只有一个1,而每列最多只有一个1 。
%我们把上面这个条件记作条件(0).
%下面对m进行初始化
m=zeros(p1,p2);
for j=1:p2
for i=1:p1
%如果b的第j个节点的度>=a的第i个节点的度
%表示可能匹配但是不一定
if db(j)>=da(i)
m(i,j)=1;
end
%此原则是针对无向图
en
%Ullmann算法:子图同构算法中最简单的一种
%判断图b中是否有子图同构于a
%a和b是图的邻接布尔矩阵
%返回0代表没有找到,1代表找到了.
%p1和p2代表a和b的阶
[p1,tmp]=size(a);
[p2,tmp]=size(b);
%ab必须都是方阵
%p1<=p2
%d是degree的意思
%用来存储每个顶点的度
da=sum(a);
db=sum(b);
%对角线假定都是0
%a,b必须对称
%m是a与b的关联矩阵
%这是一个p1*p2的布尔矩阵
%其元素m(i,j)表示a的第i个节点和b的第j个节点是否对应
%因此这个矩阵的限制为:
%每行有且只有一个1,而每列最多只有一个1 。
%我们把上面这个条件记作条件(0).
%下面对m进行初始化
m=zeros(p1,p2);
for j=1:p2
for i=1:p1
%如果b的第j个节点的度>=a的第i个节点的度
%表示可能匹配但是不一定
if db(j)>=da(i)
m(i,j)=1;
end
%此原则是针对无向图
en