摘要: 题意:一些公司共同拥有一个具有n个顶点的网络,给出了有关于这个网络的信息,即边<i,j>以及与这条边相连的公司,现在题目给出一条路径的起点和终点,要求求出这条路径经过哪些公司. 很容易想到求图的传递闭包,而这里两点之间可能有多条线路,之前对每个字母(也就是每个公司)单独来进行一遍Floyd,结果超时了,这里输入的公司标志为不同的小写字母,最多只有26个,所以我们可以根据位运算来进行优化。floyd + 位运算考虑到相邻两条边都被一个公司拥有当且仅当两条边上都有该公司对应的字母,位运算&能有获得两个公司的公共位,新边并上(|)这个结果就表示新边所属的公司View Code #incl 阅读全文
posted @ 2012-06-30 20:57 lenohoo 阅读(207) 评论(0) 推荐(0) 编辑
摘要: dfs题意:已知起点和终点,求石子从起点到达终点的最短路,如果无法到达,则输出-1。石子移动的具体规则如下: 1、开始时,石子在起点s处 2、运动方向可以是水平或垂直的,不能斜方向运动 3、最开始的时候,你可以将石子向上下左右任意一个方向抛,如果与它相邻的点是障碍物的话除外 4、一旦石子开始运动,有三种可能: a、遇到障碍物,石子会停在障碍物的前一格,障碍物会消失 b、如果出界,游戏失败 c、到达终点,游戏结束并成功 5、如果移动的次数超过10次,将认为游戏是失败的把考虑的情况放进去就行了View Code #include <cstdio>#include ... 阅读全文
posted @ 2012-06-30 18:26 lenohoo 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 双重bfs: 在推箱子游戏中人推箱子只有两种情况: 人推箱子:那么箱子此时所处的位置就是人接下来会到达的位置 人找位子推箱子:那么人就要到达箱子下一步到达位子对应的相反方向得那一个格子 所以,主干是箱子的移动过程,箱子每移动一步就对接下来人所处的位子进行考虑。也就是在一次bfs的过程中不断套用另一个bfsView Code #include <cstdio>#include <cstring>#include <iostream>#include <string>#include <queue>using namespace std; 阅读全文
posted @ 2012-06-30 15:47 lenohoo 阅读(510) 评论(1) 推荐(0) 编辑