• poj 3411 Paid Roads


      题意:有m条路,n座城市,走这些路是要付费的,每条路由两种付费方案,设一条路两端是a,b,如果走完这条路在b点付费的话,应付r,如果走这条路之前在c点付费的话,应付p,求从1端点走到n端点的最小费用。

      DFS

      刚开始想到了用搜索,自己搜索学的不好,有几个问题解决不了,首先就是每个点可以走多次,不能用0,1标记一个点是否走过,如果不标记就可能在一直走一条循环路,还有就是不会回溯,总之,自己就是不会写...

      网上抄的别人的代码,每个点最多可以走3次,回溯也挺简单...

    #include<stdio.h>
    #include<string.h>
    
    int n,m;
    struct node{
        int a,b,c,p,r;
    };
    node road[11];
    int visit[11],mincost;
    void DFS(int a,int fee)
    {
        if(a==n && mincost>fee)
        {
            mincost=fee;
            return;
        }
        for(int i=1;i<=m;i++)
        {
            if(a==road[i].a && visit[road[i].b]<=3)
            {
                int b=road[i].b;
                visit[b]++;
                if(visit[road[i].c])
                    DFS(b,fee+road[i].p);
                else
                    DFS(b,fee+road[i].r);
                visit[b]--;
            }
        }
        return ;
    }
    int main()
    {
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            memset(visit,0,sizeof(visit));
            visit[1]=1;
            mincost=2000;
            for(int i=1;i<=m;i++)
                scanf("%d%d%d%d%d",&road[i].a,&road[i].b,&road[i].c,&road[i].p,&road[i].r);
            DFS(1,0);
            if(mincost==2000)
                printf("impossible
    ");
            else
                printf("%d
    ",mincost);
        }
        return 0;
    }
  • 相关阅读:
    Velocity模版进行shiro验证
    freemarker中使用shiro标签
    freemarker中使用shiro标签
    freemarker中使用shiro标签
    Maven引入自定义jar包
    Maven引入自定义jar包
    Maven引入自定义jar包
    Spring MVC多个视图解析器及优先级
    (尚054)Vue_源码分析_模板解析_事件指令
    (尚052)+(尚053) Vue_源码分析_模板解析_大括号表达式
  • 原文地址:https://www.cnblogs.com/yongren1zu/p/3293509.html
Copyright © 2020-2023  润新知