zoukankan      html  css  js  c++  java
  • 最短路

    例题:hdu 3790

    题目链接

    http://acm.hdu.edu.cn/showproblem.php?pid=3790

    题意概括

    给出一个无向图,图中每个节点的权值有两个,一个是距离,一个是花费,求起点到终点的最短距离及其花费。

    解题思路

    这个题跟模板题的差距就是多了一个权值,首先需要知道的是,距离的权重比花费重要,所以在最短路的函数里面首先判断的是距离,当距离一样的时候在判断他的花费。最后求出最短距离及其花费。

    代码:

    #include<stdio.h>
    #include<string.h>
    #include<ctype.h>
    #include<math.h>
    #include<algorithm>
    #define inf 0x3f3f3f3f
    using namespace std;
    
    int n,xx,yy;
    int line[1010][1010],vis[1010],dis[1010],pp[1010][1010],disp[1010];
    void prime(int x,int y) {
    	int i,j,minn,k,minnp;
    	memset(vis,0,sizeof(vis));
    	for(i=1; i<=n; i++) {
    		dis[i]=line[x][i];
    		disp[i]=pp[x][i];
    	}
    	vis[x]=1;
    	for(j=1; j<n; j++) {
    		minn=inf;
    		for(i=1; i<=n; i++) {
    			if(vis[i]==0) {
    				if(dis[i]<minn) {
    					minn=dis[i];
    					minnp=disp[i];
    					k=i;
    				} else if(dis[i]==minn&&minn!=inf&&disp[i]<minnp) {
    					minn=dis[i];
    					minnp=disp[i];
    					k=i;
    				}
    			}
    		}
    		vis[k]=1;
    		for(i=1; i<=n; i++) {
    			if(vis[i]==0) {
    				if(minn+line[k][i]<dis[i]) {
    					dis[i]=minn+line[k][i];
    					disp[i]=disp[k]+pp[k][i];
    				} else if(minn+line[k][i]==dis[i]&&disp[k]+pp[k][i]<disp[i]) {
    					dis[i]=minn+line[k][i];
    					disp[i]=disp[k]+pp[k][i];
    				}
    			}
    		}
    	}
    	xx=dis[y];
    	yy=disp[y];
    }
    int main () {
    	int i,j,a,b,c,d,m;
    	while(~scanf("%d %d",&n,&m)) {
    		if(m==0&&n==0)
    			break;
    		memset(line,inf,sizeof(line));
    		memset(pp,0,sizeof(pp));
    		while(m--) {
    			scanf("%d%d%d%d",&a,&b,&c,&d);
    			if(line[a][b]==0||line[a][b]>c) {
    				line[a][b]=line[b][a]=c;
    				pp[a][b]=pp[b][a]=d;
    			}
    		}
    		scanf("%d%d",&a,&b);
    		prime(a,b);
    		printf("%d %d
    ",xx,yy);
    	}
    	return 0;
    }


  • 相关阅读:
    harbor两层nginx代理导致push不成功401
    docker hub国内镜像
    iOS越狱后导入照片
    Failed to list *v1.Secret: secrets is forbidden: User "system:node
    Centos设置limit最大打开文件数和最大进程数
    grafana设置主页面板
    MySQL数据库设计规范
    tcp time_wait
    mysqldiff No module named utilities.common.tools
    mongodb 慢查询排查
  • 原文地址:https://www.cnblogs.com/lanaiwanqi/p/10445748.html
Copyright © 2011-2022 走看看