求图中最长路径

求最长路径函数:

vector<int>Path;
vector<int>LongPath;
bool first=true;
float pathSum,longPathSum;
int paths=0;
vector<vector<int>> status(6,vector<int>(6,0));   //顶点状态

void getRoad(vector<vector<float>> prox,int start,int end)
{
	Path.push_back(start);		
	status[start][end]=1;
	if(prox[start][end]>0)
	{
	   pathSum+=prox[start][end];
	   Path.push_back(end);
		vector<int>::iterator iter;
		if(first)
		{
			for(iter=Path.begin();iter!=Path.end();++iter)
			{
				LongPath.push_back(*iter);
			}
			first=false;
			longPathSum=pathSum;
		}
		else
		{
			if(pathSum>longPathSum)
			{
				LongPath.clear();
				for(iter=Path.begin();iter!=Path.end();++iter)
			   {
				  LongPath.push_back(*iter);
		       }
				 longPathSum=pathSum;
			}
		}
		Path.pop_back();
		pathSum-=prox[start][end];
	}

	 
	 for(int i=0;i<prox.size();i++)
	 {
		if((status[start][i]==0)&&(status[i][end]==0)&&(prox[start][i]>0))
	   {
			pathSum+=prox[start][i];
			getRoad(prox,i,end);
			pathSum-=prox[start][i];
	    }
	 }
	   Path.pop_back();
       status[start][end]=0;
}

调用方法:

vector<vector<float>> mz(6,vector<float>(6,0.0)); //图中的权值
//测试最长路径
	mz[0][1]=0.3;
	mz[1][2]=1.0;
	mz[2][3]=0.3;
	mz[3][0]=0.3;
	mz[1][4]=0.6;
	mz[4][2]=0.7;
	mz[2][5]=0.4;
	mz[5][3]=0.3;
	getRoad(mz,4,1);    


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值