随笔分类 -  bfs

摘要:三维的BFS,很裸的题,不过一定要注意这一题给的坐标x表示列,y表示行,z表示层,实际输入的时候调试一下看看给的坐标是不是跟样例在图中所指的对象一样就行了。AC code:View Code 1 #include <iostream> 2 #define MAX 10000 3 using namespace std; 4 struct node{ 5 int j, i, k, step; 6 }que[MAX]; 7 char s[10]; 8 int n; 9 int sj, si, sk;10 int ej, ei, ek;11 char map[11][11][11];12 阅读全文
posted @ 2012-03-24 21:16 背着超人飞 阅读(429) 评论(0) 推荐(0)
摘要:这一题是又裸又水的一道BFS题,唯一复杂的地方就是扩展到了三维,但是跟二维的区别不大。直接看代码吧:AC code:View Code 1 #include <iostream> 2 #define MAX 50 3 #define SZ 51 4 using namespace std; 5 struct node{ 6 int x, y, z; 7 int step; 8 }que[MAX*MAX*MAX*2]; 9 int a, b, c, t, flag;10 int map[SZ][SZ][SZ];11 int d[][3]={-1,0,0,1,0,0,0,-1,0... 阅读全文
posted @ 2012-03-21 00:34 背着超人飞 阅读(185) 评论(0) 推荐(0)
摘要:这题算是比较简单的广搜题,每次有三种决策,可添加一些剪枝加快速度,直接看代码吧: 1 #include <iostream> 2 #define MAX 200001 3 using namespace std; 4 int n, k; 5 bool vis[MAX];//记录某点是否被走过 6 int queue[MAX], time[MAX]; 7 int bfs() 8 { 9 int front = 0, rear = 1;10 int x, temp;11 queue[front] = n; vis[n] = true;//把起点放入队列的头部12 w... 阅读全文
posted @ 2012-02-24 10:55 背着超人飞 阅读(153) 评论(0) 推荐(0)
摘要:这一题是比较麻烦的深搜加广搜的题,考察范围较广,题目大意是从起点出发分别找出左贴墙走、右贴墙与正常走到终点的最短路程。很自然联想到用广搜解决正常走的最短路径,用深搜解决另两种最短路程。难点是如何解决深搜时的方向问题,由于不会用C++提供的STL中德队列类,所以就自己写的,比较麻烦,不过思路应该还算清晰吧。AC代码如下:#include <iostream>#define MAX 100#define MAXN 10000using namespace std;char map[MAX][MAX];int vis[MAX][MAX];int dir1[4][2]={{0,-1},{1 阅读全文
posted @ 2012-02-24 10:01 背着超人飞 阅读(213) 评论(0) 推荐(0)
摘要:这一题算是典型的BFS的题,题目大意是要找到一个正整数n的整数倍的数,使它只由0或1组成,找到任意一个即可输出。如果从n开始按倍数枚举再找出有0或1组成的肯定超时,而且程序实现也比较麻烦,于是考虑广搜一下由0或1组成的数,再判断它是否能被n整除。AC代码如下:#include <iostream>using namespace std;__int64 a[2000000];//由于数可能比较大,所以用64位比较保险int main(){ int n; int k = 0; a[0] = 1; while (cin >> n) { if (n == 0) break; i 阅读全文
posted @ 2012-02-24 09:23 背着超人飞 阅读(141) 评论(0) 推荐(0)