poj 1724ROADS(bfs和dfs做法)
1 /* 2 dfs比较好想,就是测试数据的问题,导致在遍历边的时候要倒着遍历才过! 3 */ 4 #include<iostream> 5 #include<cstdio> 6 #include<cstring> 7 #include<vector> 8 #include<algorithm> 9 #define Max 0x3f3f3f3f 10 using namespace std; 11 12 struct node{ 13 int D; 14 int L, T; 15 node(int D, int L, int T){ 16 this->D=D; 17 this->L=L; 18 this->T=T; 19 } 20 node(){ 21 } 22 }; 23 24 node v[105][1000]; 25 int cnt[105]; 26 int vis[105]; 27 28 int maxCost, R, N, S, D, L, T; 29 int cost, dist; 30 31 void dfs(int cur, int d, int c){ 32 int i; 33 if(cur == N){ 34 if(dist>d){ 35 dist=d; 36 if(cost>c) cost=c; 37 } 38 return ; 39 } 40 for(i=cnt[cur]-1; i>=0; --i) 41 if(!vis[v[cur][i].D] && c+v[cur][i].T<=maxCost && d+v[cur][i].L<dist){ 42 vis[v[cur][i].D]=1; 43 dfs(v[cur][i].D, d+v[cur][i].L, c+v[cur][i].T); 44 vis[v[cur][i].D]=0; 45 } 46 } 47 48 int main(){ 49 while(scanf("%d", &maxCost)!=EOF){ 50 scanf("%d%d", &N, &R); 51 memset(cnt, 0, sizeof(cnt)); 52 while(R--){ 53 scanf("%d%d%d%d", &S, &D, &L, &T); 54 v[S][cnt[S]++]=node(D, L, T); 55 } 56 cost=dist=Max; 57 memset(vis, 0, sizeof(vis)); 58 dfs(1, 0, 0); 59 if(cost<=maxCost) 60 printf("%d\n", dist); 61 else printf("-1\n"); 62 } 63 return 0; 64 }
1 /* 2 spfa + 01背包 3 dist[next][j]=min(dist[cur][j-v[cur][i].T]+v[cur][i].L) j={v[cur][i].T。。。maxCost} 4 一维数组表示的是城市节点,二维表示的当前费用 5 dist[i][j]表示经过i城市,费用为j时总的路径长度! 6 */ 7 #include<iostream> 8 #include<cstdio> 9 #include<cstring> 10 #include<vector> 11 #include<queue> 12 #include<algorithm> 13 #define Max 0x3f3f3f3f 14 using namespace std; 15 16 struct node{ 17 int D; 18 int L, T; 19 node(int D, int L, int T){ 20 this->D=D; 21 this->L=L; 22 this->T=T; 23 } 24 node(){ 25 } 26 }; 27 28 node v[105][1000]; 29 int cnt[105]; 30 int dist[105][10005]; 31 int vis[105]; 32 queue<int>q; 33 int maxCost, R, N, S, D, L, T; 34 35 int spfa(){ 36 int i; 37 while(!q.empty()){ 38 int cur = q.front(); 39 q.pop(); 40 vis[cur]=0; 41 for(i=0; i<cnt[cur]; ++i){ 42 int next=v[cur][i].D; 43 for(int j=v[cur][i].T; j<=maxCost; ++j) 44 if(dist[next][j]>dist[cur][j-v[cur][i].T]+v[cur][i].L){ 45 dist[next][j]=dist[cur][j-v[cur][i].T]+v[cur][i].L; 46 if(!vis[next]){ 47 vis[next]=1; 48 q.push(next); 49 } 50 } 51 } 52 } 53 } 54 55 void bfs(int cur){ 56 q.push(1); 57 memset(dist, 0x3f, sizeof(dist)); 58 for(int i=0; i<105; ++i) 59 dist[1][i]=0; 60 vis[1]=1; 61 spfa(); 62 } 63 64 int main(){ 65 while(scanf("%d", &maxCost)!=EOF){ 66 scanf("%d%d", &N, &R); 67 memset(cnt, 0, sizeof(cnt)); 68 while(R--){ 69 scanf("%d%d%d%d", &S, &D, &L, &T); 70 v[S][cnt[S]++]=node(D, L, T); 71 } 72 memset(vis, 0, sizeof(vis)); 73 bfs(1); 74 int minDist=Max; 75 for(int i=1; i<=maxCost; ++i) 76 if(minDist>dist[N][i]) 77 minDist=dist[N][i]; 78 if(minDist!=Max) 79 printf("%d\n", minDist); 80 else printf("-1\n"); 81 } 82 return 0; 83 }
转载于:https://www.cnblogs.com/hujunzheng/p/3874165.html
poj 1724ROADS(bfs和dfs做法)相关推荐
- 利用BFS和DFS解决 LeetCode 130: Surrounded Regions
问题来源 此题来源于LEETCODE,具体问题详见下面的链接 https://leetcode.com/problems/surrounded-regions/description/ 问题简述 给定 ...
- 分别用BFS和DFS求给定的矩阵中“块”的个数
目录 背景介绍 BFS实现 基本思想 获取相邻位置元素技巧 BFS函数 DFS实现 基本思想 DFS函数 完整代码 背景介绍 背景 给出一个mxn的矩阵,矩阵中的元素为0或1.称位置(x,y)与其上下 ...
- BFS和DFS优先搜索算法
4.教你通透彻底理解:BFS和DFS优先搜索算法 作者:July 二零一一年一月一日 --------------------------------- 本人参考:算法导论 本人声明:个人原创,转 ...
- 分享两个常见的搜索算法:BFS和DFS
本文分享自华为云社区<BFS和DFS算法初探>,作者: ayin. 本次分享两个常见的搜索算法 1.BFS 即广度优先搜索 2.DFS 即深度优先搜索 岛屿数量 给定一个由 '1'(陆地) ...
- 【恋上数据结构】图代码实现、BFS、DFS、拓扑排序
图代码实现 图的基础代码 顶点Vertex 边Edge 添加边addEdge 删除边removeEdge 删除点removeVertex 完整源码 图的遍历 广度优先搜索(Breadth First ...
- 如何通透理解:BFS和DFS优先搜索算法(23年修订版)
前言 本文最早写于二零一一年一月一日,十余年过去,如今再看,之前写的确实一言难尽(包括评论区也有不少朋友指出文章质量.文章排版都有待提高),故重写本文 第一部分 什么是BFS与DFS 1.1 什么是B ...
- BFS和DFS算法原理(通俗易懂版)
DFS 算法 思想:一直往深处走,直到找到解或者走不下去为止 BFS算法 DFS:使用栈保存未被检测的结点,结点按照深度优先的次序被访问并依次被压入栈中,并以相反的次序出栈进行新的检测. BFS:使用 ...
- 数据结构与算法学习⑤(BFS和DFS 贪心算法 二分查找)
数据结构与算法学习⑤ 数据结构与算法学习⑤ 1.BFS和DFS 1.1.深度优先搜索算法 1.2.广度优先搜索算法 面试实战 102. 二叉树的层序遍历 104. 二叉树的最大深度 515. 在每个树 ...
- (五)算法与数据结构 | BFS和DFS
文章目录 0. 简介 1. 广度优先搜索 2. 深度优先搜索 3. 总结 0. 简介 广度优先搜索(BreadthFirstSearch,BFS{\rm Breadth\ First\ Search, ...
最新文章
- Install Package and Software
- 10个 Python 程序员,9个不合格?
- Angular中ngModel的$render的详解
- 多进程减少多个文件的内存占用
- OO第三次博客作业---透过代码看设计
- php pcntl 多进程学习
- 2016年,我的和自己谈谈
- 多所高校通知:暂缓返校
- artTemplate
- iOS App创建桌面快捷方式
- pku 3207 Ikki's Story IV - Panda's Trick 2-sat判定是否存在可行解
- 使用redis作为缓存,数据还需要存入数据库中吗?
- (2016弱校联盟十一专场10.2) 	E.Coins
- IDEA ideaIU点击无反应
- javascript特效大全
- ADB的使用-简单命令
- Python抖音去水印_一步到位_一蓑烟雨任平生
- matlab中grid的用法
- 响应式H5图片网盘外链系统源码 自适应PC手机端
- CHD6.3环境中,集中kylin3.0,错误解决.NoClassDefFoundError: org/apache/commons/configuration/ConfigurationE
热门文章
- 计算机论文哪儿找,查找关于计算机毕业论文.docx
- elasticsearch-7.15.2 同时支持中文ik分词器和pinyin分词器
- maven 私服 nexus3 settings.xml
- PLSQL查询字段为科学计数法,修正显示
- Excel VBA 怎样为 inputBox 输入框设置星号掩码-密码屏蔽输入框
- docker-compose的介绍与安装(结合官方文档)
- 递归(特别重要,小计算用)
- vue 圆形 水波_vue项目百度地图+echarts的涟漪水波效果
- python 打开pdf文件_Python3检验pdf文件是否有效
- springboot dubbo引入包_spring boot 集成 dubbo 企业完整版