HDU 1142 A Walk Through the Forest(SPFA+记忆化搜索DFS)
题意 :办公室编号为1,家编号为2,问从办公室到家有多少条路径,当然路径要短,从A走到B的条件是,A到家比B到家要远,所以可以从A走向B 。
思路 : 先以终点为起点求最短路,然后记忆化搜索。
- //
- #include <cstdio>
- #include <queue>
- #include <cstring>
- #include <iostream>
- const int INF = << ;
- using namespace std ;
- int N,M ;
- int mapp[][] ,pre[],dist[];
- bool vis[] ;
- void spfa(int src)
- {
- for(int i = ; i <= N ; i++)
- {
- vis[i] = false ;
- dist[i] = INF ;
- }
- queue<int>Q ;
- dist[src] = ;
- vis[src] = true ;
- Q.push(src) ;
- while(!Q.empty())
- {
- int u = Q.front() ;
- Q.pop() ;
- vis[u] = false ;
- for(int i = ; i <= N ; i++)
- {
- if(dist[i] > dist[u] + mapp[u][i] && mapp[u][i] != INF)
- {
- dist[i] = dist[u] + mapp[u][i] ;
- if(!vis[i])
- {
- vis[i] = true ;
- Q.push(i) ;
- }
- }
- }
- }
- }
- int dfs(int s)
- {
- if(pre[s]) return pre[s];
- if(s == ) return ;
- int cnt = ;
- for(int i = ;i <= N ; i++)
- {
- if(mapp[s][i] < INF && dist[s] > dist[i])
- {
- if(pre[i]) cnt += pre[i];//已经找过了
- else cnt += dfs(i);
- }
- }
- pre[s] = cnt ;
- return pre[s];
- }
- void Init()
- {
- for(int i = ; i <= N ; i++)
- for(int j = ; j <= N ; j++)
- {
- if(i == j) mapp[i][j] = ;
- else mapp[i][j] = INF ;
- }
- memset(pre,,sizeof(pre)) ;
- }
- int main()
- {
- while(cin >> N)
- {
- if(N == ) break ;
- cin >> M ;
- Init() ;
- int u,v,w ;
- while(M--)
- {
- cin >> u >> v >> w ;
- mapp[u][v] = mapp[v][u] = w ;
- }
- spfa() ;
- cout << dfs() << endl ;
- }
- return ;
- }
HDU 1142 A Walk Through the Forest(SPFA+记忆化搜索DFS)的更多相关文章
- HDU 1142 A Walk Through the Forest(Dijkstra+记忆化搜索)
题意:看样子很多人都把这题目看错了,以为是求最短路的条数.真正的意思是:假设 A和B 是相连的,当前在 A 处, 如果 A 到终点的最短距离大于 B 到终点的最短距离,则可以从 A 通往 B 处,问满 ...
- HDU 1142 A Walk Through the Forest(dijkstra+记忆化DFS)
题意: 给你一个图,找最短路.但是有个非一般的的条件:如果a,b之间有路,且你选择要走这条路,那么必须保证a到终点的所有路都小于b到终点的一条路.问满足这样的路径条数 有多少,噶呜~~题意是搜了解题报 ...
- HDU 1142 A Walk Through the Forest (记忆化搜索 最短路)
A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- HDU 1142 A Walk Through the Forest(最短路+记忆化搜索)
A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- 题解报告:hdu 1142 A Walk Through the Forest
题目链接:acm.hdu.edu.cn/showproblem.php?pid=1142 Problem Description Jimmy experiences a lot of stress a ...
- HDU 4444 Walk (离散化建图+BFS+记忆化搜索) 绝对经典
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4444 题意:给你一些n个矩形,给你一个起点,一个终点,要你求从起点到终点最少需要转多少个弯 题解:因为 ...
- hdu1428 spfa+记忆化搜索
题意: 题意坑爹,很容易误认成是做短路的条数,题意是给你一个图,让你从起点走到终点,问你有多少种走法,但有一个限制,假如你想从a走到b,必须满足终点到b的最短距离小于终点到a的最短距离. 思 ...
- HDU 1142 A Walk Through the Forest (求最短路条数)
A Walk Through the Forest 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1142 Description Jimmy exp ...
- hdu 1142 A Walk Through the Forest (最短路径)
A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
随机推荐
- Android系统编译脚本理解
android源码编译步骤: 1. repo sync 代码(下载代码) 2.start branch(用哪个分支,git相关) 3. 到根目录(android目录) $cd android/ 4. ...
- 九度oj 1349 数字在排序数组中出现的次数
原题链接:http://ac.jobdu.com/problem.php?pid=1349 二分.. #include<algorithm> #include<iostream> ...
- ios中如何计算(页数,行数,等等的算法)
页数 = (总个数 + 每页最大显示个数 - 1) / 每页显示最大的个数
- Go实现线程池
本文通过代码讲解如何实现一个线程池.代码(来自https://gobyexample.com/)及注释如下: package main import "fmt" import &q ...
- IIS 8.5配置.net网站[花了半个多小时]
1.默认安装了IIS部分功能.参考http://www.cnblogs.com/xuanhun/p/4201645.html 2.运用程序连接池, 使用集成 模式 3.运用程序连接池,设置启用32位应 ...
- UML 中的用例图解析以及starUML详细介绍
UML中的用例(Use Case)概念分析及StarUML实例 在UML 中use case 似 乎最簡單的,用例建模的最主要功能就是用来表达系统的功能性需求或行为,依我的理解用例建模可分为用例图和用 ...
- P3245: 最快路线
这道题其实还是不难的,只是自己搞混了=-=//晕,做了好久啊,其实就是个spfa,关键是存储路径搞昏了.输出格式要求太严了,航模不能有空格啊,所以因为格式WA了三次,哭啊/(ㄒoㄒ)/~~.贴上代码吧 ...
- 20145103《java程序设计》第五周学习总结
20145103<Java程序设计>第5周学习总结 教材学习内容总结 第八章 异常处理 1.设计错误对象都继承自java.lang.Throwable类 2.Java中所有错误都会被打包为 ...
- httphelp web自动化
public class HttpHelper { public static CookieContainer CookieContainers = new CookieConta ...
- SQLServer BCP 命令的使用
现在有一个包含数据的文件,每个字段用“|”分隔,现在要把这些数据导入到数据库的表中. 数据文件如下: R001|20150710 可以使用如下命令: bcp testDB.dbo.testTable ...