【解题报告】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 . 思路 : 先以终点为起点求最短路,然后记忆化搜索 ...
随机推荐
- C#遍历打印机
#region 获取本机默认打印机名称 ArrayList al1=new ArrayLIst(); private static PrintDocument fPrintDocument = new ...
- ADB调试桥安装(方式二)
想使用ADB工具可以通过安装安卓SDK套件,然后通过SDK里面的adb工具连接手机进行调试, 然而这种方式安装起来多多少少还是有点麻烦,ADB调试桥安装(方式一). 另一种方式来的就更为舒服一些了,即 ...
- Netty4.x中文教程系列(一) 目录及概述
Netty4.x中文教程系列(一)目录及概述 Netty 提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序. Netty是一个NIO客户端 服务端框架 ...
- Model的绑定
ReflectedControllerDescriptor:ControllerDescriptor Controller的 public override ActionDescriptor Find ...
- mysql union和union all
UNION 操作符用于合并两个或多个 SELECT 语句的结果集.UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型. union 是对数据进行并集操作,不包括重复 ...
- shell脚本学习笔记
1.判断符号:中括号[ ] [ ]进行数据的判断,例如我想知道HOME这个变量是否为空,[ -z "$HOME" ],或者两个字符串是否相等,[ "$HOME" ...
- Android开发环境的安装 Eclipse
Android开发环境的安装 1 IDE Android可以使用开发的IDE有Eclipse 或者 Android Studio.Android Studio还处于v 0.1.x版本,是early a ...
- Java中什么时候使用构造方法
JAVA是面向对象的语言,面向对象不是这么直接简单,它的设计思想就是要代码重用.即我以前干过类似的事,那么我找出以前可以用到的代码,完成一部分.以前没有的我重新写.这样就有了类.有了类,就是有了可以重 ...
- phpStorm连接mysql
小结:牛逼的IDE
- 修改tomcat小猫图标
网站放到网上去了,不喜欢大家访问的时候可以看到tomcat的小猫图标.今天在网上搜了搜,总结一下收藏了. 1.直接找个16*16的ico图片.放到tomcat/root下,取个名叫favicon.ic ...