zoukankan      html  css  js  c++  java
  • 游戏网站提供若干升级补丁,每个补丁大小不一,玩家要升级到最新版,如何选择下载哪些补丁下载量最小。

    include "stdafx.h"

    #include<iostream> 
    #include<vector>
    #include<string>
    #include<algorithm>
    #include<mutex>
    #include<set>
    using namespace std;
    
    struct Pathe
    {
    	int start;
    	int end;
    	int num;
    };
    
    
    int main()
    {
    	int olderE;
    	int newE;
    	//int N=6;
    	while (cin>> olderE >> newE )
    	{
    		int max = 100000;
    		vector<int> nums;
    		vector<int>starts;
    		vector<int> ends;
    		vector<int> sizes;
    
    		int start;
    		int end;
    		int si;
    		
    		while (cin >> start >> end >> si)
    		{
    			starts.push_back(start);
    			ends.push_back(end);
    			sizes.push_back(si);
    		
    			nums.push_back(start);
    			nums.push_back(end);
    	//		cout << nums.size() << endl;
    		}
    		
    		sort(nums.begin(), nums.end());
    		auto pos = unique(nums.begin(), nums.end());
    		nums.erase(pos,nums.end());
    
    		vector<vector<int>> vec(nums.size(), vector<int>(nums.size(), max));
    
    		for (int i = 0;i < starts.size();i++)
    		{
    			int x = find(nums.begin(),nums.end(),starts[i])-nums.begin() ;
    			int y = find(nums.begin(), nums.end(), ends[i]) - nums.begin();
    			vec[x][y] = sizes[i];
    			vec[y][x] = sizes[i];
    		}
    		
    		////输出元素的值
    		//cout << "得到的矩阵是:"<<vec.size() << endl;
    		//for (int i = 0;i <vec.size();i++)
    		//{
    		//	for (int j = 0;j < vec.size();j++)
    		//	{
    		//		if (i == j)
    		//		{
    		//			vec[i][j] = 0;
    		//		}
    		//		cout << vec[i][j] << "  ";
    		//	//	cout << vec[j][i] << "  ";
    		//	}
    		//	cout << endl;
    		//}
    		//记录所求节点到其他节点的距离
    		vector<int> distance(vec.size(),max);
    
    		vector<vector<int>> nodesPath;//通过的节点
    		//记录上一次的路径长度
    		vector<int> path(vec.size(), max);
    
    		//记录已经分析过的节点
    		vector<int> nodes;
    		for (int i = 0;i < vec.size();i++)
    		{
    			nodes.push_back(i);
    				
    						for (int j = 0;j < nodes.size();j++)
    						{
    							vector<int> np;
    							for (int k = 0;k < vec.size();k++)
    							{
    								if (i == 0)
    								{
    									distance[k] = vec[i][k];
    									np.push_back(k);
    									nodesPath.push_back(np);
    								}
    							
    							if (path[j] + vec[j][k] < distance[k])
    							{
    								distance[k] = path[j] + vec[j][k];
    								nodesPath[k] = nodesPath[j];
    								nodesPath[k].push_back(k);
    							}
    						}
    							path = distance;
    					}
    				
    		}
    	/*//	输出距离
    		cout << "v0到各个节点的距离是:" << endl;
    		for (int i = 0;i < distance.size();i++)
    		{
    			cout << distance[i] << "  ";
    		}*/
    	//	cout << endl;
    	//	for (int i = 0;i < nodesPath.size();i++)
    		for (int i = nodesPath.size()-1;i < nodesPath.size();i++)
    		{
    			for (int j = 0;j < nodesPath[i].size()-1;j++)
    			{
    				cout << nums[nodesPath[i][j]] << "->";
    			}
    			cout<<nums[nodesPath[i][nodesPath[i].size()-1]]<<"("<<distance[i]<<")";
    			cout << endl;
    		}
    	
    	
    	}
    
    	return 0;
    
    }
  • 相关阅读:
    第十四周课程总结&实验报告(简单记事本的实现)
    第十三周课程总结
    第十二周课程总结
    第十一周课程总结
    第十周课程总结
    第九周课程总结&实验报告(七)
    第八周课程总结&实验报告(六)
    第七周课程总结&实验报告(五)
    第五周课程总结&实验报告(四)
    2019JAVA课程总结
  • 原文地址:https://www.cnblogs.com/wdan2016/p/6638014.html
Copyright © 2011-2022 走看看