• zoj 2526


    最短路问题,要求出最短路的个数。

    输出一条得到JavaBean最多的最短路径








    #include<stdio.h>
    #include<string.h>
    #define inf 0x3fffffff
    int n,m,map[510][510],dp[510],mark[510],dis[510],w[510],pre[510],link[510];
    int st,ed;
    void dijkstra()
    {
    	int i,j,k,min;
    	memset(mark,0,sizeof(mark));//标记房间是否走过
    	memset(dp,0,sizeof(dp));//记录到达位置得到最多的JavaBean
    	memset(pre,-1,sizeof(pre));//记录到达此房间的前一个房间
    	memset(link,0,sizeof(link));//记录到达此位置最短路的个数
    	for(i=0;i<n;i++)
    		dis[i]=inf;//距离起点的最短距离
    	dis[st]=0;
    	link[st]=1;
    	dp[st]=w[st];
    	for(i=0;i<n;i++)
    	{
    		min=inf;k=-1;
    		for(j=0;j<n;j++)
    		{
    			if(!mark[j]&&min>dis[j])
    			{
    				min=dis[j];
    				k=j;
    			}
    		}
    		mark[k]=1;
    		for(j=0;j<n;j++)
    		{
    			if(mark[j]||dis[j]<dis[k]+map[k][j]||map[k][j]==inf)continue;
    			if(dis[j]==dis[k]+map[k][j])//如果从k到达j的距离与j的最小距离相等
    				link[j]+=link[k];//j的最短路数要加上k的
    			else link[j]=link[k];//如果从k到达j的路短的话,到达j的最短路数就等于k的最短路数
    			if(dis[j]>dis[k]+map[k][j]||dp[j]<dp[k]+w[j])//路径更短或者路劲相等得到的JavaBean更多
    			{		
    				dis[j]=dis[k]+map[k][j];
    				pre[j]=k;
    				dp[j]=dp[k]+w[j];
    			}			
    		}
    	}	
    }
    void prit(int u)
    {
    	if(u==st){printf("%d",st);return;}
    	prit(pre[u]);
    	printf(" %d",u);
    }
    int main()
    {
    	int i,j,x,y,p;
    	while(scanf("%d%d%d%d",&n,&m,&st,&ed)!=-1)
    	{
    		for(i=0;i<n;i++)
    			for(j=0;j<n;j++)
    				map[i][j]=inf;
    			for(i=0;i<n;i++)
    				scanf("%d",&w[i]);
    			for(i=0;i<m;i++)
    			{
    				scanf("%d%d%d",&x,&y,&p);
    				if(map[x][y]>p)
    					map[x][y]=map[y][x]=p;
    			}
    			dijkstra();
    			printf("%d %d\n",link[ed],dp[ed]);
    			prit(ed);
    			printf("\n");
    	}
    	return 0;
    }


    5 10 0 2
    1 2 1 5 3
    0 1 2
    0 2 4
    0 3 3
    0 4 1
    1 2 2
    1 3 1
    1 4 1
    2 3 1
    2 4 3
    3 4 2






  • 相关阅读:
    js实现base64转换
    使用maven命令终端构建一个web项目及发布该项目
    使用eclipse构建Maven项目及发布一个Maven项目
    Maven在Windows上的安装与配置
    centos7下安装配置redis3.0.4
    Centos7下完美安装并配置mysql5.6
    linux常用命令总结
    VMware下centos桥接模式静态ip配置
    解决centos7下tomcat启动正常,无法访问项目的问题
    centos7系统下安装配置jdk、tomcat教程
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3122847.html
Copyright © 2020-2023  润新知