(子)图同构算法VF2实现(2)——源代码与具体实现

上一篇关于VF2的博客写的太水了,http://blog.csdn.net/mmc2015/article/details/49777447。而且错误百出。


至于VF2思想,看原论文吧。


1)数据结构:

//每个邻接边的结构,注意,该结构不单独使用,必须和某个点一起使用
struct EDGE
{
	int id2; //边的另一端的点的id
	int id2Label; //注意,两条边一样,除了该边上的label一样,还要另一端的节点的label(注意不是id,所以才加了这个变量)也一样
	int label; //边上的label
};

struct NODE
{
	int id;
	int label;
	int edgeNumber; //邻接的边有多少条
	vector<EDGE> adjacencyEdgeSet; //邻接的边
};

//邻接链表结构,不过是用vector来实现
struct GRAPH
{
	int graphID;
	vector<NODE> nodeSet;
};


2)读数据:

vector<GRAPH *> ReadGraph(const char *filename)
{
	FILE *fp = fopen(filename, "r");
	/*
	if (!fp)
	{
		printf("fp is NULL, file [%s] doesn't exist...\n", filename);
		return NULL;
	}
	*/
	char mark[2];
	int id,label,id2;
	NODE node;
	EDGE edge;
	vector<GRAPH *> gSet;
	GRAPH * g = NULL;
	while(true)
	{
		fscanf(fp, "%s", mark);
		if(mark[0]=='t')
		{
			
			fscanf(fp, "%s%d", mark, &id);
			if(id==-1)
			{
				int i,s=g->nodeSet.size(),j,eN;
				for(i=0;i<s;++i)
				{
					eN=g->nodeSet[i].adjacencyEdgeSet.size(); //计算最后一个graph中每个node的邻接边的个数
					g->nodeSet[i].edgeNumber=eN;
					for(j=0;j<eN;++j) //找到每一个id2对应的id2Label
					{
						g->nodeSet[i].adjacencyEdgeSet[j].id2Label=g->nodeSet[g->nodeSet[i].adjacencyEdgeSet[j].id2].label
  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 29
    评论
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值