首页 > 其他分享 >hdu 1599 find the mincost route(无向图的最小环:求从一个点遍历所有节点以后回到原点的最短路径)

hdu 1599 find the mincost route(无向图的最小环:求从一个点遍历所有节点以后回到原点的最短路径)

时间:2023-05-07 21:32:03浏览次数:47  
标签:hdu dist int route 路径 mincost maxn 编号 顶点



题目:


find the mincost route

Time Limit: 1000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2801    Accepted Submission(s): 1115


Problem Description

杭州有N个景区,景区之间有一些双向的路来连接,现在8600想找一条旅游路线,这个路线从A点出发并且最后回到A点,假设经过的路线为V1,V2,....VK,V1,那么必须满足K>2,就是说至除了出发点以外至少要经过2个其他不同的景区,而且不能重复经过同一个景区。现在8600需要你帮他找一条这样的路线,并且花费越少越好。

 


Input

第一行是2个整数N和M(N <= 100, M <= 1000),代表景区的个数和道路的条数。
接下来的M行里,每行包括3个整数a,b,c.代表a和b之间有一条通路,并且需要花费c元(c <= 100)。

 


Output

对于每个测试实例,如果能找到这样一条路线的话,输出花费的最小值。如果找不到的话,输出"It's impossible.".

 


Sample Input

3 3
1 2 1
2 3 1
1 3 1
3 3
1 2 1
1 2 3
2 3 1

 


Sample Output

3 It's impossible.

 


Author

8600

 


Source

HDU 2007-Spring Programming Contest - Warm Up (1)

 


Recommend



题目分析:

                无向图的最小环。

Floyd 算法保证了最外层循环到 k 时所有顶点间已求得以 0…k-1 为中间点的最短路径。一个环至少有3个顶点,设某环编号最大的顶点为 L ,在环中直接与之相连的两个顶点编号分别为 M 和 N (M,N < L),则最大编号为 L 的最小环长度即为 Graph(M,L) + Graph(N,L) + Dist(M,N) ,其中 Dist(M,N) 表示以 0…L-1 号顶点为中间点时的最短路径,刚好符合 Floyd 算法最外层循环到 k=L 时的情况,则此时对 M 和 N 循环所有编号小于 L 的顶点组合即可找到最大编号为 L 的最小环。再经过最外层 k 的循环,即可找到整个图的最小环。、


需要注意的是,当报Runtime Error (ACCESS_VIOLATION)错误的时候有可能是因为数据读取出现了问题。把根据边数读取写成了根据点数读取。


代码如下:

/*
 * d.cpp
 *
 *  Created on: 2015年2月7日
 *      Author: Administrator
 */

#include <iostream>
#include <cstdio>
#include <cmath>


using namespace std;


const int maxn = 110;
const int inf = 1000000;

int dist[maxn][maxn];
int e[maxn][maxn];

int n,m;

void initial(){
	int i;
	int j;
	for(i = 1 ; i <= n ; ++i){
		for(j = 1 ; j <= n ; ++j){
			if(i == j){
				e[i][j] = 0;
			}else{
				e[i][j] = inf;
			}
		}
	}
}


int floyd(){
	int i;
	int j;
	int k;

	int mincircle = inf;
//	dist = e;
	for(i = 1 ; i <= n ; ++i){
		for(j = 1 ; j <= n ; ++j){
			dist[i][j] = e[i][j];
		}
	}

	//根据Floyed的原理,在最外层循环做了k-1次之后,dis[i][j]则代表了i到j的路径中所有结点编号都小于k的最短路径
	for(k = 1 ; k <= n ; ++k){

		//环的最小长度为edge[i][k]+edge[k][j]+i->j的路径中所有编号小于k的最短路径长度
		for(i = 1 ; i < k ; ++i){
			for(j = i+1 ; j < k ; ++j){
				if(dist[i][j] + e[i][k] + e[k][j] < inf){
					mincircle = min(mincircle,dist[i][j] + e[j][k] + e[k][i]);
				}
			}
		}


		 //floyd原来的部分,更新dist[i][j]
		for(i = 1 ; i <= n ; ++i){
			for(j = 1 ; j <= n ; ++j){
				if(dist[i][j] > dist[i][k] + dist[k][j]){
					dist[i][j] = dist[i][k] + dist[k][j];
				}
			}
		}
	}

	return mincircle;
}


int main(){
	while(scanf("%d%d",&n,&m)!=EOF){
		initial();

		int i;
		for(i = 1 ; i <= m ; ++i){
			int a;
			int b;
			int c;
			scanf("%d%d%d",&a,&b,&c);

			if(e[a][b] > c){
				e[a][b] = e[b][a] = c;
			}
		}


		int ans = floyd();

		if(ans != inf){
			printf("%d\n",ans);
		}else{
			printf("It's impossible.\n");
		}
	}

	return 0;
}






标签:hdu,dist,int,route,路径,mincost,maxn,编号,顶点
From: https://blog.51cto.com/u_5290007/6252592

相关文章

  • vue-router
    安装vue-router是一个vue的插件,用来实现前端的路由,推荐使用pnpmaddvue-router@4进行安装。推荐配合vue3组合式api使用基础从一个例子开始<!--App.vue文件--><divid="app"><h1>HelloApp!</h1><p><!--使用router-link组件进行导航--><!--通过传......
  • vue this.$router.push 页面传值问题
    在修改一个别人的bug的时候发现一个问题,记录一下,vue前端页面在刷新页面后只读页面可以编辑了在前一个传值页面他的写法是this.$router.push({name:'xxx',query:{isEdit:false}});在接收的时候写的是this.isEdit=this......
  • React 中 Router的相关面试题
    一、请你说说react的路由是什么?React的路由是纯前端的路由,就是根据hash或browserpath的变化,框架内封装好了方法,可以自由的切换DOM展示,来模拟页面或局部页面被替换的目的;让浏览器不用刷新,也能获取想要的页面结构,保存内存数据,提升用户体验 二、React-Router实现原理?当url发......
  • Linux 进程调度之schdule主调度器
    考虑到文章篇幅,在这里我只讨论普通进程,其调度算法采用的是CFS(完全公平)调度算法。至于CFS调度算法的实现后面后专门写一篇文章,这里只要记住调度时选择一个优先级最高的任务执行一、调度单位简介1.1task_struct结构体简介对于Linux内核来说,调度的基本单位是任务,用structtask......
  • Vue 路由router
    简单案例:App.vue是核心组件,其中的<router-link>相当于a标签,to相当于href,export是暴露函数,这样某组件才能被其他组件识别到代码:<template><divid="app"><imgsrc="./assets/logo.png"><h1>hello!!!!!!!!!!!!!</h1><!--路由路径这里......
  • HDU 2108 Shape of HDU (判断凹凸)
    ShapeofHDUTimeLimit:3000/1000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):10350    AcceptedSubmission(s):4796ProblemDescription话说上回讲到海东集团推选老总的事情,最终的结果是XHD以微弱优势当选,从此以后,“徐队”......
  • vue3 vueRouter4 :No match found for location with path ***
    0.采用vue+router4做路由导航.首次载入控制台很干净.F5刷新后,控制台爆出警告,但点击路由正常工作.1.经过排查发现,是menu中使用了<router-link>这玩意,后来改造成  @click="router.push(ele.path)"即可消除警告 2.网络上各种方式我均尝试过,都是无效方案,比如:......
  • Policy-based-route
    策略路由-接口方式配置ACL<R1>system-viewEntersystemview,returnuserviewwithCtrl+Z.[R1]acl3001[R1-acl-adv-3001]displaythis[V200R003C00]#aclnumber3001#return[R1-acl-adv-3001]rulepermitipsource1.1.1.20[R1-acl-adv-3001]quit[R1]acl300......
  • Policy-based-route
    本地策略路由仅对本地触发的流量生效配置方法-全局模式下配置ACLaclnumber3000rule5permitipdestination7.7.7.00.0.0.255配置方法-全局模式下配置本地路由策略policy-based-routeaapermitnode10if-matchacl3009applyip-addressnext-hop13.1.1.2配置方......
  • Router Function
    https://blog.csdn.net/m0_67778103/article/details/123384914 https://blog.csdn.net/zhang33565417/article/details/122012459?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168266912316800215051889%2522%252C%2522scm%2522%253A%252220140713.130102334......