bfs
高凌霄
这个作者很懒,什么都没留下…
展开
-
hdu 1428 漫步校园
解题思路:用bfs求出每个点到终点的最短距离,用dfs求出路径,这里注意dfs应该记忆化搜索。且数组必须是longlong型。#include<iostream> #include<cstdio> #include<queue> using namespace std; const int N=55; typedef long long LL; #define MM(a) memset(a,NULL原创 2015-10-01 18:28:35 · 427 阅读 · 1 评论 -
hdu 1429 胜利大逃亡(续)
刚开始不知道有状态压缩,定义了一个这样的结构体 struct node() { int x,y; int a[10]; int step; }; 数组a用来存放钥匙,然后代码写出来,时间和内存齐爆。很无语。 然后查题解。要用状态压缩,我还是第一次听说这名词。 就是定义一个三维数组,第三维存储在某种状态下,是否走过map[x][y]位置。 本菜鸡参考这位大神原创 2015-10-02 20:44:24 · 402 阅读 · 1 评论 -
hdu 1430 魔板
刚开始不知道有康托展开,一筹莫展,查了一下大神题解。看到说要用康托展开,遂跑去学。 康托展开:http://blog.csdn.net/zhongkeli/article/details/6966805 学完写爆搜,结果TLE。冥思苦想半天,发现所有的魔版初态其实都可以用“12346578”来替换。即s->e可以等量变换成ss->se。所以我们只用bfs遍历“12345678”经过A,B,C三种原创 2015-10-03 22:34:53 · 488 阅读 · 1 评论 -
hdu 4856 tunnel(bfs+状态压缩dp)
先用bfs算出第i个通道的出口到第j个通道入口的最短路。然后用状态压缩dp求解。这里注意我们需要用到二维的dp数组,第二位储存在第i种状态下最后完成的状态。 状态压缩dp:用i表示状态,若第j种状态已完成,则:dp[i][j]=min[dp[i][j],dp[i^(1<<k)][k]+dis[k][j]; 这里dis[k][j]表示通道k的出口到通道j的入口最短路距离想到状态压缩dp的话就很容易的原创 2015-10-31 23:00:29 · 342 阅读 · 0 评论