基于矩阵合同变换算法的无向图同构识别——C++代码实现

兹于2017年4月,应《算法设计与分析》课程设计的要求,本人就基于矩阵合同变换算法的图同构识别做了较为深入的理解,借助《西南民族大学学报(自然科学版)》2011年第05期,作者:谢科、饶怀章的《图同构的充要条,从而借助图同构的充要条件通过矩阵的合同变换来进行图同构识别,该算法对有向图和无向图均适用。


基于矩阵合同变换算法的图同构识别


1、矩阵合同变换算法的流程图。



2、矩阵合同变换算法实现的关键代码

#include<iostream>
#include<stdlib.h>
#define MAX 100 
using namespace std;
 
 
struct AdjacencyMatrix{
    int points;             //邻接矩阵的顶点个数(即矩阵阶数)
    int edges;              //邻接矩阵的边的条数(即邻接矩阵非零点个数/2)
    int Matrix[MAX][MAX];   //矩阵
    int weight[MAX];        //行度数的集合
};
 
AdjacencyMatrix A,B;//定义邻接矩阵A、B,将A调整成B且满足同构的必要条件则A、B同构
 
 
//行位置交换函数,返回true为正常交换
bool swapRows(int i,int j){
    int k;
    //进行行交换
    for(k=0;k<A.points;k++){
        int temp;
        temp = A.Matrix[i][k];
        A.Matrix[i][k]= A.Matrix[j][k];
        A.Matrix[j][k]= temp;
    }
    int temp;
    //度交换
    temp =A.weight[i];
    A.weight[i]= A.weight[j];
    A.weight[j]= temp; 
    return true;
} 
 
 
//列位置交换函数,返回true为正常交换,false为无法交换,不同构
bool  swapColumns(intcurrentLayer,int i,intj){
    int k;
    //判断是否能交换
    for(k=0;k<currentLayer;k++){
        if(A.Matrix[k][i]!=A.Matrix[k][j]){
            //无法交换,因为交换后会影响先前调整的结果,故而不同构
            return false;
  • 36
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 37
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 37
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值