zoukankan      html  css  js  c++  java
  • POJ 3411 Paid Roads(DFS)

    【题目链接】 http://poj.org/problem?id=3411

    【题目大意】

      从a到b的路,如果已经访问过c那么路费为p否则为r,问从1到n的最短路

    【题解】

      搜索记录每个点在该回溯中被访问的次数,
      因为这张图最多只有十个点,所以如果一个点被访问的次数超过3,
      那么一定是重复走环路了,可证明重复走环路答案一定不是最优的因此可以停止继续搜索这个点。

    【代码】

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    const int INF=0x3f3f3f3f;
    int n,m,vis[20],ans;
    struct data{int a,b,c,p,r;}u[20];
    void dfs(int a,int w){
        if(a==n&&ans>w){ans=w;return;}
        for(int i=1;i<=m;i++){
            if(a==u[i].a&&vis[u[i].b]<=3){
                int b=u[i].b;
                vis[b]++;
                if(vis[u[i].c])dfs(b,w+u[i].p);
                else dfs(b,w+u[i].r);
                vis[b]--;
            }   
        }return;
    }
    int main(){
        while(~scanf("%d%d",&n,&m)){
            memset(vis,0,sizeof(vis)); vis[1]=1;
            ans=INF;
            for(int i=1;i<=m;i++)scanf("%d%d%d%d%d",&u[i].a,&u[i].b,&u[i].c,&u[i].p,&u[i].r);
            dfs(1,0);
            if(ans==INF)puts("impossible");
            else printf("%d
    ",ans);
        }return 0;
    }
  • 相关阅读:
    flask之闪现
    对于Flask中蓝图的理解
    flask中的CBV和FBV
    Flask之基本使用与配置
    Flask
    Flask-信号(blinker)
    flask-migrate
    Flask WTForms的使用和源码分析 —— (7)
    mac下卸载jdk
    RabbitMQ五种消息队列学习(三)–Work模式
  • 原文地址:https://www.cnblogs.com/forever97/p/poj3411.html
Copyright © 2011-2022 走看看