随笔分类 -  搜索题

摘要:嘻嘻,直接BFS水过……#include<iostream>#include<math.h>#include<queue>using namespace std;int map[9][9],si,sj,ei,ej,mins;int dir[8][2]={{2,1},{1,2},{-2,1},{2,-1},{1,-2},{-2,-1},{-1,-2},{-1,2}};struct node{ int x,y,dis; node(int _x=0,int _y=0,int _dis=0):x(_x),y(_y),dis(_dis){}; /* friend bo 阅读全文
posted @ 2011-08-01 19:06 枕边梦 阅读(182) 评论(0) 推荐(0)
摘要:恩,直接DFS,还好,不算很慢#include<iostream>#include<string>#include<algorithm>using namespace std;char map[21][21];int n,m,cnt;int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};void dfs(int si,int sj){ for(int k=0;k<4;k++) { int i=si+dir[k][0]; int j=sj+dir[k][1]; if(i>0&&i<=m&& 阅读全文
posted @ 2011-08-01 15:28 枕边梦 阅读(199) 评论(0) 推荐(0)
摘要:BFS+剪枝不剪枝直接TLE了呀,无语,剪枝真是一门学问,果然,搜索最重要的是剪枝#include<iostream>#include<queue>#include<string>#include<algorithm>using namespace std;int map[51][51][51],vis[51][51][51],a,b,c,mins,T,count1;int dir[6][3]={{0,1,0},{0,-1,0},{1,0,0},{-1,0,0},{0,0,1},{0,0,-1}};bool escape;struct node{ 阅读全文
posted @ 2011-08-01 13:21 枕边梦 阅读(149) 评论(0) 推荐(0)
摘要:BFS此题与普通的BFS不同的是它的路径可以重复走,虽然空间代价不大(8*8),但 是如果你不能很好的判断没有出路的情况,那么就会陷入死循环。我是这么想的:我 先定义一个标记数组mark[][],出发点赋值为6。当你走到4时,那点的mark[][]值赋 为6。每次进队列时判断,如果当前点的mark值大于新生成点的mark时,才能进队列, 否则不能,这样就防止了进入死循环的情况。使用mark数组就省略了标记数组vis 不过,有一点,我始终不解,一到达终点就退出,这样保证了时间最短吗?可还是过了,困惑……当然,也有遍历完所有点的#include<iostream>#include< 阅读全文
posted @ 2011-08-01 00:53 枕边梦 阅读(196) 评论(0) 推荐(0)
摘要:优先队列+广度搜索第一次优先队列,重载操作符不是我写的……………………代码,参考大牛的……………………原来优先队列+BFS是这样滴#include<iostream>#include<string>#include<algorithm>#include<queue>using namespace std;char s[201][201];int n,m,vis[200][200],ans;int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};bool es;struct node{ int x,y,dis; node 阅读全文
posted @ 2011-07-31 21:40 枕边梦 阅读(154) 评论(0) 推荐(0)
摘要:差距啊,知道整体思路,知道如何剪枝了,结果效率还是比别人慢那么多,唉……奇偶性剪枝还有路径剪枝,具体看下大牛的结题报告吧http://acm.hdu.edu.cn/forum/read.php?tid=6158写得好详细,学习了#include <stdio.h>#include <iostream>#include <string.h>#include <stdlib.h>using namespace std;char map[9][9];int n,m,t,di,dj; //(di,dj):门的位置bool escape;int dir[4 阅读全文
posted @ 2011-07-31 14:42 枕边梦 阅读(2696) 评论(0) 推荐(0)