【解题报告】HDU -1142 A Walk Through the Forest
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1142
题目大意:Jimmy要从办公室走路回家,办公室在森林的一侧,家在另一侧,他每天要采取不一样的路线回家。由于他要尽快回家,他在选择路线的时候总是要越来越靠近他家。计算符合条件的路线一共有几种。
解题思路:题目要求“路线要越来越靠近家”,也就是说每次选择下一个结点的时候距离家的距离比当前的结点近。首先该结点离家的距离就是该节点到家的最短路径的长度。所以我们先求出所有节点到家的最短路径。(Dijkstra算法)
然后从办公室出发,选择路径的时候要选择相邻且距离更近的点作为下一个点,利用DFS遍历。当前结点的路径条数等于下一个所有可能的结点的路径的总和。而终点的路径为1。
附上代码:
#include<stdio.h>
#define MaxVertexNum 1000 /*顶点数*/
#define MaxWeight 1147483647
typedef int weight;
weight w[MaxVertexNum][MaxVertexNum]={};/*边的关系*/
int d[MaxVertexNum];
int dfs[MaxVertexNum];
/*两点的最短路径*/
void ShortestPath(int vertexnum,int m)
/*从m节点出发,p数组保存路径,d数组保存长度*/
{
int v,min,i,j;
int bo[MaxVertexNum];
for(v=;v<vertexnum;v++)
{
bo[v]=;
d[v]=w[m][v];
}
d[m]=;
bo[m]=;
for(i=;i<vertexnum;i++)
{
min=MaxWeight;
for(j=;j<vertexnum;j++) /*v最近*/
if(!bo[j]&&d[j]<min) {v=j;min=d[j];}
bo[v]=;
for(j=;j<vertexnum;j++)
{
if(!bo[j]&&min+w[v][j]<d[j])
{
d[j]=min+w[v][j];
}
}
}
}
/*根据边的关系输入*/
void input_AdjacencyMatrix(int n)
{
int i,j;
while(n--)
{
scanf("%d%d",&i,&j);
scanf("%d",&w[i-][j-]); /*输入权值*/
w[j-][i-]=w[i-][j-];
}
}
int DFS(int n,int vertexnum)/*表示n节点到1节点的路径数*/
{
int i,s;
if(n==) return ;/*结束条件*/
if(dfs[n]!=-) return dfs[n];/*如果已经计算过则直接调用*/
s=;
for(i=;i<vertexnum;i++)
{
if(w[n][i]!=MaxWeight&&d[n]>d[i])/*相邻且距离更近*/
{
s+=DFS(i,vertexnum);/*路径数的和*/
}
}
dfs[n]=s;/*保存当前遍历结果*/
return s;
}
int main()
{ int i,j,vertexnum,n;
/*freopen("yx.txt","r",stdin);*/
while()
{
scanf("%d",&vertexnum);
if(vertexnum==) return ;
scanf("%d",&n);
for(i=;i<vertexnum;i++)
for(j=;j<vertexnum;j++)
w[i][j]=MaxWeight;/*无穷大*//*初始化*/
input_AdjacencyMatrix(n);
ShortestPath(vertexnum,);
for(i=;i<vertexnum;i++) dfs[i]=-;
printf("%d\n",DFS(,vertexnum));
}
return ;
}
【解题报告】HDU -1142 A Walk Through the Forest的更多相关文章
- 题解报告: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 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 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1142 Description Jimmy exp ...
- 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(最短路+dfs搜索)
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
http://acm.hdu.edu.cn/showproblem.php?pid=1142 这道题是spfa求最短路,然后dfs()求路径数. #include <cstdio> #in ...
- HDU 1142 A Walk Through the Forest(SPFA+记忆化搜索DFS)
题目链接 题意 :办公室编号为1,家编号为2,问从办公室到家有多少条路径,当然路径要短,从A走到B的条件是,A到家比B到家要远,所以可以从A走向B . 思路 : 先以终点为起点求最短路,然后记忆化搜索 ...
随机推荐
- Magento 二次开发手册相关
最近开始学习Magento二次开发,其实以前在科泰的时候就已经见识到这套电子商务系统的复杂了,当时是部门要上一个Mangeto的团购系统,傻东安装就安装了2天才搞定,安装以后发现有300多张表,当时说 ...
- hdu 4753 Fishhead’s Little Game 博弈论+记忆化搜索
思路:状态最多有2^12,采用记忆化搜索!! 代码如下: #include<iostream> #include<stdio.h> #include<algorithm& ...
- 简易解说拉格朗日对偶(Lagrange duality)(转载)
引言:尝试用最简单易懂的描述解释清楚机器学习中会用到的拉格朗日对偶性知识,非科班出身,如有数学专业博友,望多提意见! 1.原始问题 假设是定义在上的连续可微函数(为什么要求连续可微呢,后面再说,这里不 ...
- 安装Genymotion android模拟器
Genymotion优点: 速度快性能好,资源占用低,系统要求512MB内存就能运行 支持 OpenGL 3D加速,可以流畅玩大型3D游戏 支持同时启动多个模拟器,可以实现软件或游戏多开 支持多种虚拟 ...
- 配置sshd_config中的PermitRootLogin设置root登录或者禁止root登录
在etc的sshd_config文件中,默认有PermitRootLogin no的配置,这个的意思是禁止root用户登录,如果想要允许root登录,需要su root用户到sshd_config下进 ...
- Clearing Floats清除浮动--clearfix的不同方法的使用概述
清除浮动早已是一个前端开发人员必学的一课.毫无疑问,多年来,我们已经接触过多种清除浮动的方法,现在“clearfix methods”越来越被大家熟知.在深入剖析“clearfix”的多种用法之前,我 ...
- 308. Range Sum Query 2D - Mutable
题目: Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper ...
- Linux命令-tar
tar命令用于对文件打包压缩或解压 格式:tar [选项 -C 指定解压到的目录] [文件] 打包并压缩文件: tar -zcvf 压缩包名.tar.gz 文件名 解压并展开压缩包 tar -zxvf ...
- Oracle ->> 连续聚合
select id, grp_factor, sum (id) over( partition by grp_factor order by id rows between unbounded pre ...
- JSP列表形式显示数据库中的数据 OracleCachedRowSet 实例
现在数据库中有一张用户表,希望用户在jsp页面中输入用户名和密码以及 用户类型,在servlet中插入数据库后,在另一个jsp页面中把数据库中所有的用户名和类型都以列表的形式列出来 可以用Ora ...