兹于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;