无向图:查找最小环集合(最短路径回溯算法)

在无向图中查找最小环,通过寻找所有顶点的最短路径,并对每个顶点删除顶点来形成环。这种方法适用于拓扑图,能找出拓扑最小环,但若要找到距离最小的环,需要对边加权。文章提供了实例代码和图示。
摘要由CSDN通过智能技术生成

         在无向图中查找最小环,就像需要查找一个蜂窝中所有孔洞,如果只查找数目,可以利用欧拉公式,若查找到所有环,需要更进一步的搜索。

         方法:寻找到所有顶点的最短路径,对每一个顶点,取出环,循环删除顶点,输出所有最小环。

         注意:拓扑图具有位置可变性,不影响图结构的拓扑变化。所以此方法,只能找到拓扑最小环,若想找到距离最小环,需要对边进行加权。

         


        原文:找出无向图中所有环的算法。代码也转自于作者。

       

图片实例:

      

code:

       

bool findAllLoop(int argc, char* argv[]);

//查找所有路径的算法是成功的;但最短路径不能保证找到最小环
int main(int argc, char* argv[])
{
	findAllLoop(argc, argv);
	return 0;
}

bool findAllLoop(int argc, char* argv[]){

	//if (argc != 5)
	{
		printf("\tThis algorithm require 3 parameters"
			"\n\t\t1:the size of eage"
			"\n\t\t2:the filename contain eage-data"
			"\n\t\t3:the size of vertax"
			"\n\t\t4:the filename contain vertax-data\n");
		//exit(0);
	}
	//eage_size = atoi(argv[1]);
	//strcat(filename_eage, argv[2]);
	//vertax_size = atoi(argv[3]);
	//strcat(filename_vertax, argv[4]);
	wishchin::eage_size = 22;//边的个数
	//strcat(filename_eage, argv[2]);

	std::string filename_eages("D:/DataSet/RsData/loopFind/houseAdj.txt");

	wishchin::vertax_size = 17;//顶点个数
	//strcat(filename_vertax, argv[4]);
	std::string filename_vertaxs("D:/DataSet/RsData/loopFind/houseVotex.txt");
	//printf("eage_size : %d, vertax_size : %d, filename-eage : %s, filename-vertax : %s\n",\
				wishchin::eage_size, wishchin::vertax_size, filename_eages, wishchin::filename_vertax);

	wishchin::readEageDataFromFile(filename_eages);
	wishchin::readVertaxDataFromFile(filename_vertaxs);

	wishchin::createAdjacentMatrix();

	wishchin::DFSTraverse();
	//test_stack();  

	return true;
}

namespace wishchin{

	void readEageDataFromFile( std::string filename_eages)
	{
		FILE* f_read;
		if (NULL == (f_read = fopen(filename_eages.c_str(), 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值