zoukankan      html  css  js  c++  java
  • 乘车路线 (二维最短路)

    题目大意

    • 编号为1~N 的 N 座城镇用若干仅供单向行驶的道路相连,每条道路上均有两个参数:道路长度(length)和在该条道路上行驶的费用(cost)。
    • BOB准备从城镇 1 出发到达城镇 N ,但他目前只有 W 的钱,为此,你需要帮助他寻找一条从城镇 1 到城镇 N 在他能支付的前提下的一条最短路线

    输入格式

    • W N M(N为城镇数目,2<=N<=100,M 为道路条数,1<=M<=10000,W 为钱的数目,0<=W<=1000)
    • 随后的 M 行每行为一条道路的信息,包含 4 个数值(u,v,w,cost),表示从城镇 u 到 v 有一条长度为 w 的单向道路,经过这条道路需要花费 cost 。(1<=u,v<=N,1<=w<=100,0<=cost<=100)

    输出格式

    • 输出最短长度,若无解,则输出“NO”;

    算法分析

    • 裸的最短路板子
    • emm 裸的二维最短路板子
    • 真的是个板子博主不会给解释的
    • 你还看啥呢
    • 要代码????

    代码展示

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 1e3+10;
    int cnt,head[maxn],k;
    int dis[maxn][1005];
    int vis[maxn][1005];
    int ans = 0x3f3f3f3f;
    
    struct node{
    	int next,to,dis,cost;
    }a[maxn << 4];
    
    struct Node{
    	int to,cost;
    	Node(int x,int y){
    		to = x;
    		cost = y;
    	}	
    };
    
    void add(int x,int y,int z,int v){ a[++cnt].to = y; a[cnt].next = head[x]; a[cnt].dis = z; a[cnt].cost = v; head[x] = cnt;}//加边
    
    queue<Node> q;
    
    void spfa(int s){//把每个都加一维状态表示花费多少钱
    	memset(dis,0x3f,sizeof(dis));
    	dis[s][0] = 0;vis[s][0] = 1;
    	q.push(Node(s,0));
    	while(!q.empty()){
    		int u = q.front().to;
    		int val = q.front().cost;
    		q.pop();
    		vis[u][val] = 0;
    		for(int i = head[u];i;i = a[i].next){
    			int v = a[i].to;
    			if(val + a[i].cost > k)continue;//剪枝
    			if(dis[v][val + a[i].cost] > dis[u][val] + a[i].dis){
    				dis[v][val + a[i].cost] = dis[u][val] + a[i].dis;
    				if(!vis[v][val + a[i].cost]){
    					vis[v][val + a[i].cost] = 1;
    					q.push(Node(v,val + a[i].cost));
    				}
    			}
    		}
    	}
    }
    
    int main(){
    	int n,m;scanf("%d%d%d",&k,&n,&m);
    	for(int i = 1;i <= m;++i){int x,y,z,v;scanf("%d%d%d%d",&x,&y,&z,&v);add(x,y,z,v);}
    	spfa(1);
    	for(int i = 0;i <= k;++i)ans = min(ans,dis[n][i]);
    	if(ans == 0x3f3f3f3f){printf("NO
    ");return 0;}
    	printf("%d",ans);
    	return 0;
    }
    
    如初见 与初见
  • 相关阅读:
    【梦断代码】与我们队的相似之处
    梦断代码 之 你失败过吗
    梦断代码 之 程序人生
    C#中父类转换为子类
    C#中Dictionary泛型集合7种常见的用法
    Linux 常见命令 目录处理指令
    使用XSLT+XML生成网页
    我心目中的Asp.net核心对象
    配色速成
    VS.NET中JavaScript隐藏特性
  • 原文地址:https://www.cnblogs.com/HISKrrr/p/13337540.html
Copyright © 2011-2022 走看看