子图同构算法系列(1)

Naive alogrithm for Subgraph Isomorphism.

1. 如何判定子图同构。

  有个Gα和Gβ, Gα有pa个点,qa条边,Gβ有pb个点,qb条边。A是Gα的邻接矩阵,相应的B是Gβ的邻接矩阵。那么如何判断同构呢。设A是子图,B是原图。那么有一个A的点到B的点的映射。这个映射的模式叫做M。M是pa行,pb列的。M有一个性质就是每行只有一个1,每列至多一个1。这个就是一个A中的点到B中的点的一个映射。我们定义一个C = [cij] = M(MB)T。如果在图A中i和j有边能推导出图C中i和j有边。那为什么是对的呢。因为M是映射,MB就是把B中被映射的点按照顺序抽出来在和B点对应。 M中第i行j列为1的意义是A的第i个点对应,B的第j个点。MB中第i行j列为1的意义是现在A的第i个点对应到的点到B的第j个点有一条边。把这个矩阵转置在乘以M。C就是B中和A对应的点和在B中的边全部抽出来组成的图。

  那么如果aij = 1能推导出cij = 1。A就是B的一个子图的同构。

 

  1 #include <iostream>
  2 #include <stdio.h>
  3 
  4 class Matrix{
  5 private:int **cont;
  6         int a, b;
  7 public:
  8     Matrix(){
  9         cont = 0;
 10         a = b = 0;
 11     }
 12     Matrix(int a, int b){
 13         this->a = a;
 14         this->b = b;
 15         cont = new int*[a];
 16         for (int i = 0; i < a; i++){
 17             cont[i] = new int[b];
 18             for (int j = 0; j < b; j++){
 19                 cont[i][j] = 0;
 20             }
 21         }
 22     }
 23     Matrix(void *x, int a, int b){
 24         int *y = (int*
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值