最短路+记忆化搜索
HDU 1142 A Walk Through the Forest
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1142

> 题意:找出不同的路径条数,假如jimmy要从A走到B的话满足jimmy从B到家的距离比从A到家的距离短
> 这样我们可以通过最短路算法,找出从家(看成源点)到各个点的最短路径长度,记做D[v]。 然后就可以从起点(office)
> dfs,首先从某点i到某点j走得通,然后满足D[j]<D[j],则可以往下搜索,直到终点(house),普通的dfs是会超时的,N都是1000了,不加剪枝啥的,dfs生成树那么大,肯定会TLE的。
> 所以这里要用记忆话搜索,减少重复计算某个一个状态的值。 对于最短路和记忆化,本人也是刚刚学习的,最短路模仿的数据结构书上的
> dijkstra,记忆化也是借鉴别人的思路。不过我想说说子结构的重复计算 比如 0
> 1 2
> 3 4 5 6

> 7 8 9

>  10   dfs(0) 是 从0到10的所以路径条数(假设走法随意,只要深度+1即可) dfs(4)是从4到10的路径条数,1可以到4,2也可以到4.
> 那么dfs(1)后肯定已经计算过dfs(4)了,dfs(2)就没必要再计算,直接用这个结果就行了 所以可以用个数组保存即可
> 再啰嗦一句,题库分这题在并查集里面,有哪位大神能教我并查集怎么做?

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef struct
{
int arcs[][];
int vexnum,arcnum;
int vexs[];
} AMGraph;
AMGraph G;
int D[],path[],S[],dp[];///这里忽略掉path吧,没用到
const int maxint = ;
int n,m;
void createG(AMGraph &G)
{
int x,y,distance;
for(int i = ; i <=n; i++)
for(int j =; j<=n; j++)
G.arcs[i][j] = maxint; ///建图,不连通的用一个能够满足题意的无穷大值表示
for(int i = ; i<m; i++)
{
scanf("%d%d%d",&x,&y,&distance);
G.arcs[x][y] = G.arcs[y][x] = distance;
}
}
void shortestflyod(AMGraph &G,int v0)///书上代码,不懂得还是看书吧
{
int v,w;
for( v = ; v<=n; v++)
{
S[v] = ;
D[v] = G.arcs[v0][v];
if(D[v]<maxint) path[v] = v0;
else path[v] = -;
}
S[v0] = ;
D[v0] = ;
for(int i = ; i<=n; i++)
{
int minn = maxint;
for( w = ; w<=n; w++)
if(!S[w]&&D[w]<minn)
{
v = w;
minn = D[w];
}
S[v] = ;
for(w = ; w<=n; w++)
if(!S[w]&&D[v]+G.arcs[v][w]<D[w])
{
D[w] = D[v] + G.arcs[v][w];
path[w] = v;
}
}
}
int dfs(int v)
{
if(v==)///到终点,找到一条路径
{
return ;
}
if(dp[v]) return dp[v];///计算过,直接返回
for(int i = ; i<=n; i++)
if(G.arcs[v][i]!=maxint&&D[i]<D[v])//连通且满足条件
dp[v] += dfs(i);//dp[v] 等于下面一个分支的路径数之和
return dp[v];
}
int main()
{
while(scanf("%d",&n)&&n)
{
scanf("%d",&m);
createG(G);
shortestflyod(G,);
memset(dp,,sizeof(dp));
int ans = ;
ans = dfs();
printf("%d\n",ans);
}
return ;
}

hdu 1142 最短路+记忆化的更多相关文章

  1. 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 ...

  2. hdu 1428(很好的一道题,最短路+记忆化搜索)

    漫步校园 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  3. [HDU 1428]--漫步校园(记忆化搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1428 漫步校园 Time Limit: 2000/1000 MS (Java/Others)    M ...

  4. *HDU1142 最短路+记忆化dfs

    A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

  5. UVA - 10917 - Walk Through the Forest(最短路+记忆化搜索)

    Problem    UVA - 10917 - Walk Through the Forest Time Limit: 3000 mSec Problem Description Jimmy exp ...

  6. hdu 4597 Play Game(记忆化搜索)

    题目链接:hdu 4597 Play Game 题目大意:给出两堆牌,仅仅能从最上和最下取,然后两个人轮流取,都依照自己最优的策略.问说第一个人对多的分值. 解题思路:记忆化搜索,状态出来就很水,dp ...

  7. Luogu P2149 [SDOI2009]Elaxia的路线(最短路+记忆化搜索)

    P2149 [SDOI2009]Elaxia的路线 题意 题目描述 最近,\(Elaxia\)和\(w**\)的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们必须合理地安排两个人在一起的 ...

  8. Luogu P3953 逛公园(最短路+记忆化搜索)

    P3953 逛公园 题面 题目描述 策策同学特别喜欢逛公园.公园可以看成一张 \(N\) 个点 \(M\) 条边构成的有向图,且没有自环和重边.其中 \(1\) 号点是公园的入口,\(N\) 号点是公 ...

  9. hdu 4856 Tunnels (记忆化搜索)

    Tunnels Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

随机推荐

  1. JavaScript_DOM学习篇_图片切换小案例

    今天开始学习DOM操作,下面写一个小案例来巩固下知识点. DOM: document object model (文档对象模型) 根据id获取页面元素 : 如: var xx = document.g ...

  2. int ,long long 范围

    类型名称 字节数 取值范围signed char 1 -128-+127short int 2 -32768-+32767int 4 -2147483648-+2147483647(10位数 2^31 ...

  3. 第34-3题:LeetCode437. Path Sum III

    题目 二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数. 示例: root = [10,5,-3,3,2,null,11,3,-2,null,1], sum ...

  4. Delphi 编写DLL动态链接库文件的知识

    一.DLL动态链接库文件的知识简介: Windows的发展要求允许同时运行的几个程序共享一组函数的单一拷贝.动态链接库就是在这种情况下出现的.动态链接库不用重复编译或链接,一旦装入内存,Dlls函数可 ...

  5. datatable 默认按某字段排序

    "columns": [ { data: null}, { data: 'name'}, { data: 'birthday'} ], "order": [[ ...

  6. 给网站添加icon图标

    只需制成ico结尾的图片即可

  7. gdb-pada调试实例

    先编写个简单的hello的程序 hello.c (ps:有没有头文件行不行,试试不就知道了) int main(){ printf("hello!\n"); int m,n; in ...

  8. LVS基于DR模式搭建负载均衡群集

    LVS -DR模式集群架构原理图

  9. Linux系统崩溃,数据迁移

    就在1小时前,处理了件如标题所述的麻烦事儿.吃完午饭,想对此作个总结,一来自己梳理下过程以便后面遇见类似的事可以 快速处理,二来同行的小伙伴们可以探讨下.故事是这样的,公司所在园区物业晚上断电8小时, ...

  10. Fiddler(一)

    Fiddler:学习scrapy,不只是满足于网页上爬去信息的成功乐趣,现在开始接触爬去手机信息了,不好解决,知道过程不会轻松,但自己想去尝试.QAQ 写这篇博客是基于以下的几位大神学习笔记,我只是做 ...