HDU 1142 A Walk Through the Forest dijkstra + DFS

http://acm.hdu.edu.cn/showproblem.php?pid=1142

题意:

  Jimmy在位置 1 ,每天晚上要回位置2(家),计算1到2的最短距离,Jimmy要先去一个地方然后再回家,到了那个地方离家的距离不能大于1到2

的最短距离,计算出有多少种这样的走法。

 

坑爹:

  当用DFS搜索有多少条路径时会超时。

 

解法:

  剪枝:用mark数组记录上一次走到这一个点在往下走有多少条路径时符合条件的。

 

 

View Code
 1 #include<iostream>
 2 using namespace std;
 3 
 4 const int MAXN = 1000 + 10 ;
 5 const int MAX = 1000000 + 10 ;
 6 
 7 int N;
 8 int M;
 9 int dis[MAXN] ;
10 int map[MAXN][MAXN];
11 int used[MAXN];
12 int mark[MAXN];    // 某点到家的符合条件的路径有多少种
13 int flag[MAXN];    
14 
15 void dijskra(int x)
16 {
17     dis[x] = 0 ;
18     used[x] = 0;
19     
20     for(int j = 0 ; j < N ; j ++ )
21     {
22         int mix = MAX;
23         int y;
24         
25         for( int i = 1 ; i <= N ; i ++ )
26         {
27             if( !used[i] && dis[i] <= mix )
28             {
29                 mix = dis[i] ; 
30                 y = i ;
31             }
32         }
33         
34         used[y] = 1;
35         
36         
37         for( i = 1 ; i <= N ;i ++)
38         {
39             if(!used[i])
40             {
41                 if( dis[i] > dis[y] + map[y][i] && map[y][i]  )
42                 {
43                     dis[i] = dis[y] + map[y][i] ;
44                 }
45             }
46         }
47     }
48 }
49 
50 int DFS(int x)
51 {
52     if(x == 2)
53     {
54         return 1;
55     }
56     
57     if(mark[x] != 0 )
58     {
59         return mark[x];
60     }
61     
62     for( int i = 1 ; i <= N ; i ++ )
63     {
64         if(dis[i] < dis[x] && !flag[i] && map[x][i] )
65         {
66             mark[x] += DFS(i);
67         }
68     }
69     return mark[x];
70 }
71 
72 
73 
74 int main()
75 {
76     while(cin>> N , N )
77     {
78         cin >> M ;
79         memset( map  , 0 ,  sizeof(map)) ;
80         memset( used , 0 , sizeof(used)) ;
81         memset( dis  , MAX, sizeof(dis)) ;
82         memset( mark , 0 , sizeof(mark)) ;
83         memset( flag , 0 , sizeof(flag)) ;
84         
85         for(int i = 0 ; i < M ; i++ )
86         {
87             int a;
88             int b;
89             int c;
90             cin>> a >> b >> c ;
91             map[a][b] = c ;
92             map[b][a] = c ;
93         }
94         
95         dijskra(2);
96         cout<<DFS(1)<<endl;
97     }
98     return 0;
99 }

 

  

转载于:https://www.cnblogs.com/pcpcpc/archive/2012/09/03/2669377.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494706.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

剑指 Offer 06. 从尾到头打印链表(递归、逆置链表、头部动态插入)

题目 输入一个链表的头节点&#xff0c;从尾到头反过来返回每个节点的值&#xff08;用数组返回&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,3,2] 输出&#xff1a;[2,3,1] 限制&#xff1a; 0 < 链表长度 < 10000 解法一&#xff1a;递归&#xff0…

王家耀院士 | 新型智慧城市“大脑”就是时空大数据平台

来源&#xff1a;泰伯网摘要&#xff1a;新型智慧城市建设的任务包括五点&#xff0c;首先是大力实施“互联网城市”行动&#xff1b;二要加强体制机制创新和城市资源整合&#xff1b;三要推进工业化、信息化、城镇化、农业现代化融合创新&#xff1b;四要着力解决“城市病”&a…

网站架构之缓存应用(摘录)

网站缓存这个话题并不新颖&#xff0c;但是能否将它用好&#xff0c;可是一门学问&#xff0c;同一件工具在不同人的手中会做出不同的事情来。这里我来分享总结下我对于网站架构中缓存应用的一些看法和经验&#xff0c;大家有好的想法可以补充 第一&#xff1a;缓存的一些基…

C++校招常见面试题(2019年校招总结)

总结了语法、数据结构、常见排序算法、操作系统、网络五大块常见校招面试题。欢迎补充与修正。 ★★语法知识★★ 一、C与C的区别 面向对象与面向过程的区别 面向过程 面向过程编程是就分析出解决问题题的步骤&#xff0c;然后把这些步骤一步一步的实现&#xff0c;使用的时…

3分钟了解物联网三大技术的未来争夺战!

来源&#xff1a;传感器技术摘要&#xff1a;物联网通过通信技术将人与物、物与物进行连接&#xff0c;在智能家居、工业数据采集等区域网通信场景一般采用短距离通信技术&#xff0c;对于广范围、远距离的连接则需要远距离通信技术。物联网通过通信技术将人与物、物与物进行连…

Socket一次Recv接受的字节有限制么?

答案是&#xff1a;有。大约 5-15KB &#xff0c;默认 具体 和什么有关系我也不知道。反正我测试的是&#xff1a;16371字节。win7 x64。 可以使用setSockOpt来设置 recvbuf or sndbuf 的大小&#xff0c;但是 我的建议还是控制 每次接受的字节数 控制在一定范围 比如 5KB。因为…

❤ 想知道大厂面试都问什么吗,附最强面试技巧!!(大数据开发岗)❤

作者简介 蓝桥签约作者、大数据&Python领域优质创作者。维护多个大数据技术群&#xff0c;帮助大学生就业和初级程序员解决工作难题。 我的使命与愿景&#xff1a;持续稳定输出&#xff0c;赋能中国技术社区蓬勃发展&#xff01; 粉丝福利&#xff1a;免费下载海量【PPT…

C++常见面试题(2019年校招总结)

一、C与C语言的联系 c语言是面向过程的结构化语言&#xff0c;c是面向对象的的程序设计语言&#xff0c;在c语言的基础上进行了扩充和完善&#xff0c;并且c兼容了c语言的面向过程的特点。在C中可以使用继承、多态进行面向对象的编程。 面向对象与面向过程的区别 面向过程 …

机器怎样才能有意识

来源&#xff1a;应行仁科学网博客摘要&#xff1a;意识&#xff0c;没有一个客观的科学定义&#xff0c;难以观测认定&#xff0c;但它是每个人都能主观感受到的真实。意识&#xff0c;没有一个客观的科学定义&#xff0c;难以观测认定&#xff0c;但它是每个人都能主观感受到…

OD使用教程3(下) - 调试篇03|解密系列

OD使用教程3(下) - 调试篇03 让编程改变世界 Change the world by program 逻辑运算 [caption id"attachment_706" align"aligncenter" width"358"]逻辑运算[/caption] 关于test指令 test指令格式&#xff1a;test dest, src 这个指令和…

❤『面试知识集锦100篇』1.面试技巧篇丨HR的小心思,你真的懂吗?

作者&#xff1a;不吃西红柿 简介&#xff1a;CSDN博客专家、蓝桥签约作者、大数据&Python领域优质创作者。 目录 一、企业考察要点 技巧一&#xff1a;了解自己的专业技能与 JD 中的匹配点 技巧二、把控好企业「味道」 技巧三、精彩的自我介绍 技巧四、常见问题回答…

剑指 Offer 03. 数组中重复的数字()

在一个长度为 n 的数组 nums 里的所有数字都在 0&#xff5e;n-1 的范围内。数组中某些数字是重复的&#xff0c;但不知道有几个数字重复了&#xff0c;也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 解题思路 原地交换&#xff0c;让对应的数字放在对应位置…

机器人行业发展方向预测报告

来源&#xff1a;招商证券摘要&#xff1a;随着中国人口红利消失&#xff0c;机器人不仅在制造业上正在替代工人&#xff0c;还将在军事、服务、娱乐等领域取代人类&#xff0c;“钢铁侠”已不仅仅存在于美国科幻电影中&#xff0c;而正走入我们的生活。本篇报告对机器人行业及…

在BingoCC上面解析域名实现智能路由

天朝的网络强大无人能及&#xff0c;世界上最大的Ping值不是从中国到美国而是从电信到联通。当你搭建了一个网站需要为南方北方的客户服务的话少不得你就要选择有中国特色的双线机房了。现在假如你已经把你的服务器已经部署在双线机房了&#xff0c;并且申请到了双线IP。为了让…

Hive小文件问题:如何产生、造成影响、解放办法

一、小文件是如何产生的 1.动态分区插入数据&#xff0c;产生大量的小文件&#xff0c;从而导致map数量剧增。 2.reduce数量越多&#xff0c;小文件也越多(reduce的个数和输出文件是对应的)。 3.数据源本身就包含大量的小文件。 二、小文件问题的影响 1.从Hive的角度看&…

数据结构 - 队列(图解+源码)

队列 概念 队列是一种特殊的线性表&#xff0c;特殊之处在于它遵循先入先出&#xff08;FIFO&#xff09;原则&#xff0c;只允许在表的前端&#xff08;front&#xff09;进行删除操作&#xff0c;而在表的后端&#xff08;rear&#xff09;进行插入操作&#xff0c;和栈一样…

测试人员容易遗漏一些隐藏的缺陷

通常软件测试会暴露软件中的缺陷&#xff0c;经过修正后可以保证软件系统的功能满足需求并正确运行。但是&#xff0c;在系统测试和确认测试中&#xff0c;测试人员容易遗漏一些隐藏的缺陷。众所周知&#xff0c;软件测试不可能发现所有的缺陷&#xff0c;而软件开发周期各个阶…

学界 | 清华AMiner团队发布53页计算机图形学研究报告

来源&#xff1a;AI科技评论摘要&#xff1a;清华 AMiner 团队近日发布新一期研究报告——《计算机图形学研究报告》&#xff0c;报告全文共 53 页&#xff0c;从概念、技术、人才、会议、应用及相应趋势详细介绍了计算机图形学的相关内容。报告内容速览概述篇&#xff1a;计算…

『面试知识集锦100篇』2.linux篇丨shell基础命令全集,我奶奶的速查手册!!

目录 第一部分:基础知识 一、Linux 文件基本属性 二、Linux 磁盘管理 2.1 df命令 2.2 du命令 2.3 磁盘检验

❤『面试知识集锦100篇』3.mysql篇丨mysql基础知识和面试真题,看完不收藏算我输!!

作者:不吃西红柿 简介:CSDN博客专家、蓝桥签约作者、大数据&Python领域优质创作者。 谢谢那些曾经击倒我的人, 躺着可真TM舒服。 目录 一、知识体系 1、关系型数据库术语 2、事务的基本要素(ACID)