设为首页 加入收藏

TOP

HDU-3790-最短路径
2014-11-23 21:38:16 来源: 作者: 【 】 浏览:6
Tags:HDU-3790- 路径
题目要求先选最短的道路,如果没有最短路可选,即几条道路都相等,再考花费。用Dijkstra更快一些。在选出最短边的同时加上对应的花费就可以了。详细请看代码:
 
#include  
#include  
#include  
using namespace std;  
#define MAX 1002  
#define inf 999999  
int map[MAX][MAX],cost[MAX][MAX];  
int n;  
void DJ(int st,int en)//Dijkstra 传入起点和终点  
{  
    int i,j,MIN,v;  
    int flag[MAX],dis[MAX],value[MAX];  
    for(i=1;i<=n;i++)  
    {  
        dis[i]=map[st][i];  
        value[i]=cost[st][i];//与一般模板相似,多加一个花费而已  
    }  
    memset(flag,0,sizeof(flag));  
    flag[st]=1;  
    for(i=1;i<=n;i++)  
    {  
        MIN=inf;  
        for(j=1;j<=n;j++)  
        {  
            if(!flag[j]&&MIN>dis[j])  
            {  
                v=j;  
                MIN=dis[j];  
            }  
        }  
        if(MIN==inf)break;  
        flag[v]=1;  
        for(j=1;j<=n;j++)  
        {  
            if(!flag[j]&&map[v][j]dis[v]+map[v][j])  
                {  
                    dis[j]=dis[v]+map[v][j];  
                    value[j]=value[v]+cost[v][j];//先选好边长,同时也把对应的花费加上  
                }  
                else  
                    if(dis[j]==dis[v]+map[v][j])//如果路长相等,则优先花费小的  
                {  
                    if(value[j]>value[v]+cost[v][j])  
                        value[j]=value[v]+cost[v][j];  
                }  
            }  
        }  
  
    }  
    cout< 
  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇UVALive 4329 Ping pong 下一篇1013. Battle Over Cities (25)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis on AWS:Elast (2025-12-27 04:19:30)
·在 Spring Boot 项目 (2025-12-27 04:19:27)
·使用华为开发者空间 (2025-12-27 04:19:24)
·Getting Started wit (2025-12-27 03:49:24)
·Ubuntu 上最好用的中 (2025-12-27 03:49:20)