• poj1724ROADS(BFS)


    链接

    本来想写spfa 加点什么限制什么的可能就过了 写着写着就成裸BFS了 也没优化就水过了

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<stdlib.h>
     6 #include<queue>
     7 using namespace std;
     8 #define N 110
     9 #define M 10010
    10 #define INF 0xfffffff
    11 struct node
    12 {
    13     int u,v,w,next,len;
    14 }ed[M<<1];
    15 struct mode
    16 {
    17     int u,sum,len;
    18 };
    19 int head[N],vis[N],dis[N];
    20 int n,m,t,sp,ans;
    21 void init()
    22 {
    23     t = 0;
    24     memset(head,-1,sizeof(head));
    25 }
    26 void add(int u,int v,int w,int len)
    27 {
    28     ed[t].u = u;
    29     ed[t].v = v;
    30     ed[t].w = w;
    31     ed[t].len = len;
    32     ed[t].next = head[u];
    33     head[u] = t++;
    34 }
    35 void spfa()
    36 {
    37     queue<mode>q;
    38     mode ss,st;
    39     int i;
    40     for(i = 2; i <= n ; i++)
    41     dis[i] = INF;
    42     ss.u = 1;
    43     ss.sum = 0;
    44     ss.len = 0;
    45     q.push(ss);
    46     dis[1] = 0;
    47     while(!q.empty())
    48     {
    49         ss = q.front();
    50         q.pop();
    51         int u = ss.u;
    52         if(ss.len>ans)
    53         continue;
    54         if(u==n)
    55         {
    56             ans = ss.len;
    57             continue;
    58         }
    59         for(i = head[u] ; i!=-1 ; i = ed[i].next)
    60         {
    61             int v = ed[i].v;
    62             if(ss.sum+ed[i].w<=sp)
    63             {
    64                 st.len = ss.len+ed[i].len;
    65                 st.u = v;
    66                 st.sum = ss.sum+ed[i].w;
    67                 q.push(st);
    68             }
    69         }
    70     }
    71     if(ans!=INF)
    72     printf("%d
    ",ans);
    73     else
    74     printf("-1
    ");
    75 }
    76 int main()
    77 {
    78     int i,u,v,len,w;
    79     while(scanf("%d",&sp)!=EOF)
    80     {
    81         init();
    82         ans = INF;
    83         scanf("%d%d",&n,&m);
    84         for(i = 1; i <= m ;i++)
    85         {
    86             scanf("%d%d%d%d",&u,&v,&len,&w);
    87             add(u,v,w,len);
    88         }
    89         spfa();
    90     }
    91     return 0;
    92 }
    View Code
  • 相关阅读:
    Shiro加密
    SpringBoot操作MongoDB实现增删改查
    ArrayList 源码分析(JDK1.8)
    Java 内存泄漏
    Java 原型模式(克隆模式)
    3.2-3.3 Hive中常见的数据压缩
    7、html的body内标签之图片及表格
    6、html的body内标签之超链接
    5、html的body内标签之多行文本及下拉框
    3.1 HiveServer2.Beeline JDBC使用
  • 原文地址:https://www.cnblogs.com/shangyu/p/3298531.html
Copyright © 2020-2023  润新知