【解题报告】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 . 思路 : 先以终点为起点求最短路,然后记忆化搜索 ...
随机推荐
- 优化DB2缓冲页的大小
零部件日结无法进行下去,建议配置C:\Program Files\SQLLIB目录下的db2cli.ini文件,加入此节:[DMSCNDB]CLIPkg=5 并重启DB2试试 另外,可以在命令行处理器 ...
- Linux网络编程7——使用TCP实现双方聊天
思路 主线程负责发送消息,另一线程负责接收消息.服务端和客户端均是如此. 注意 当A方close掉用于通信的socket端口后,该端口是不会立即关闭的.因为此时可能B方的信息还没send完.因此,此时 ...
- UVA 11076 Add Again 计算对答案的贡献+组合数学
A pair of numbers has a unique LCM but a single number can be the LCM of more than one possiblepairs ...
- vim使用详解
1 插入类命令 i // 在当前字符前插入 I // 在当前行首插入 a // 在当前字符后写入 A ...
- HtmlAgilityPack 之 HtmlNode类
HtmlAgilityPack中的HtmlNode类与XmlNode类差不多,提供的功能也大同小异.下面来看看该类提供功能. 一.静态属性 public static Dictionary<st ...
- lintcode:组成最大的数
最大数 给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数. 注意事项 最后的结果可能很大,所以我们返回一个字符串来代替这个整数. 样例 给出 [1, 20, 23, 4, 8],返回组合最 ...
- 通过GeoIP2分析访问者IP获取地理位置信息
原文链接:http://blog.csdn.net/johnnycode/article/details/42028841 MaxMind GeoIP2 服务能识别互联网用户的地点位置与其他特征,应用 ...
- DXT纹理压缩
转:http://blog.csdn.net/lhc717/article/details/6802951 我们知道游戏中对于3D物体表面细节的表现最重要的还是靠贴图来实现的,那么越是高分辨率越是真彩 ...
- Redis的List操作
lpush key value 作用: 把值插入到链接头部 127.0.0.1:6379> lpush character a (integer) 1 127.0.0.1:6379> rp ...
- 解决:Eclipse调试的时候报错'Launching XXX' has encountered a problem. Cannot connect to VM.
问题如下图: 原因:开了代理(我使用的是Proxifier)如图 解决方案:关闭Proxifier即可