题意:有n座城市和m(1<=n,m<=10)条路。现在要从城市1到城市n。有些路是要收费的,从a城市到b城市,如果之前到过c城市,那么只要付P的钱,如果没有去过就付R的钱。求的是最少要花多少钱。

解题思路:这道题的n与m都很小,dfs可以搞定,但这里与以往的搜索不同,以前dfs每个节点只能够访问一次,这里有多次访问的可能性。很好的是这道题给的是一个有向图,我们只要知道某节点被访问的次数即可,如果访问次数过多,那么肯定是走到了一个环,立即跳出来。。参考了别人的,节点访问次数最多只有3

AC:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;const int inf = 0x3f3f3f;
struct Edge
{int k,c,p,r,next;
}edge[20];
int n,m,cnt,vis[20],pre[20],ans;void addedge(int a,int b,int c,int p,int r)
{edge[cnt].k = b;edge[cnt].c = c;edge[cnt].p = p;edge[cnt].r = r;edge[cnt].next = pre[a];pre[a] = cnt++;
}void dfs(int cur,int sum)
{if(cur == n){if(ans > sum) ans = sum;return;}if(vis[cur] > 3 || sum > ans) return;vis[cur]++;for(int i = pre[cur]; i != -1; i = edge[i].next){int k = edge[i].k;if(vis[edge[i].c])dfs(k,sum+edge[i].p);else dfs(k,sum+edge[i].r);}vis[cur]--;
}int main()
{while(scanf("%d%d",&n,&m)!=EOF){cnt = 0;memset(pre,-1,sizeof(pre));memset(vis,0,sizeof(vis));for(int i = 1; i <= m; i++){int a,b,c,p,r;scanf("%d%d%d%d%d",&a,&b,&c,&p,&r);addedge(a,b,c,p,r);}ans = inf;dfs(1,0);if(ans != inf)printf("%d\n",ans);else printf("impossible\n");}return 0;
}

poj 3411(DFS多点访问)相关推荐

  1. POJ 3411 DFS

    大致题意: 有n座城市和m(1<=n,m<=10)条路.现在要从城市1到城市n.有些路是要收费的,从a城市到b城市,如果之前到过c城市,那么只要付P的钱,如果没有去过就付R的钱.求的是最少 ...

  2. A - 棋盘问题 POJ - 1321(dfs)

    A - 棋盘问题 POJ - 1321 dfs 复杂度计算: dfs共进行a步,每步需要循环n次,复杂度为 a^n次方 首先是暴力 an*n,果然炸了 #include<cstdio> # ...

  3. poj 3411 Paid Roads (dfs)

    题目链接 题意:有N个城市被M条道路连接起来了,每两个城市之间可能存在超过一条路,但是城市之间是单向连接的. 每条路是要花费的.每条路的花费可以选择两种方式:1:假如a城市到达b城市,如果之前经过了c ...

  4. poj 3411 1724

    题目:http://poj.org/problem?id=3411 题意:n 个城市,m 条路,每条路都有两种情况的费用,一种是 在 b 城市付费 r,一种是提前在 c 城市付费 p 元,问从 1 到 ...

  5. poj 2531(dfs)

    题目链接:http://poj.org/problem?id=2531 思路:由于N才20,可以dfs爆搞,枚举所有的情况,复杂度为2^(n). 1 #include<iostream> ...

  6. POJ - Hopscotch(DFS)

    题目链接:http://poj.org/problem?id=3050 Time Limit: 1000MS Memory Limit: 65536K Description The cows pla ...

  7. POJ 2458 DFS+判重

    题意: 思路: 搜+判重 嗯搞定 (听说有好多人用7个for写得-.) //By SiriusRen #include <bitset> #include <cstdio>0 ...

  8. POJ 2230 DFS

    题意: Bessie 最近做了农场看守,他每天晚上的工作就是巡视农场并且保证没有坏人破坏农场.从谷仓出发去巡视,并且最终回到谷仓. Bessie 视力不是很好,不能像其他农场的看守一样,对农场的每一条 ...

  9. POJ 3051 DFS

    题意:判断连通块大小 水题 //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm ...

最新文章

  1. java字符串分解 StringTokenizer用法
  2. oracle怎么删除lob对象,Oracle系列:LOB大对象处理
  3. echars显示折点数据_数据可视化的基础语法
  4. 关于推荐的一个算法工程师访谈,有一些内容值得看看
  5. 如何查看 Linux 中所有正在运行的服务
  6. 测试连接redis时报错redis.clients.jedis.exceptions.JedisConnectionException: Failed to create socket.
  7. mel加载一个物体不同姿态的模型实现动画效果
  8. 【设计模式】解释器模式
  9. springBoot+springSecurity 数据库动态管理用户、角色、权限
  10. Spring学习(一)Spring简介、SpringIOC
  11. django jwt token 令牌
  12. 如何在线免费将MP4转换成MP3格式音乐
  13. 小心!新媒体环境下,营销传播还有几个大坑!
  14. wordpress启动_使用Wumblr在WordPress中启动微博
  15. lcd屏幕有mipi接口吗_液晶屏mipi接口能用的最大分辨率是多少
  16. 使用jasypt加密解密
  17. c语言blackjack设计思路,Veriog——简易的BlackJack(21点)程序
  18. 【转】JSON书写格式
  19. Centos 7安装Quagga
  20. c++双人战争小游戏

热门文章

  1. 2、Spring Cloud - 入门概述
  2. 挪动脑袋吃汉堡?AR版《贪吃蛇》帮你治好颈椎病
  3. LeetCode【217. Contains Duplicate】
  4. Tomcat目录结构及Tomcat Server处理一个http请求的过程
  5. zabbix 2.2自动安装脚本
  6. CentOS下安装semanage
  7. 修复 SyntaxHighlighter 3.0.83 Java 代码多行注释 Bug
  8. SharePoint Workflow 基础
  9. 毕业的答辩需要的要求(从校方的角度)
  10. future career plan