搜索
文章平均质量分 70
「已注销」
SYSU
展开
-
POJ 2243 ZOJ 1091 UVaOJ 439 Knight moves(BFS广度优先搜索)
//典型的BFS(广度优先搜索)//马走日所需最少步数问题#includeusing namespace std;int map[8][8];//记录步数数组int vis[8][8];//访问过的记录数组char a[3],b[3];int x1,y1,x2,y2;void set(int x1,int y1){ //剪去不合理范围 if(x1+1 <原创 2010-02-14 21:50:00 · 1059 阅读 · 0 评论 -
Sicily 1002 Anti-prime Sequences(深度优先搜索)
//深度优先搜索//这道题最大的收获就是学会了深搜的卡时//TLE了N次之后,看了论坛上赵大牛的指点,用卡时就过了,0.14MS//在做深搜题的时候,有些题目是不需要搜索那么多次的,当超过某个次数时可以当做搜索不出答案了。//这样的做法虽然无法保证正确性,但是可以大大提高效率//因此在这道题用了t这个全局变量记录搜索的次数,当t超过4000次时,dfs直接return,不用再搜索了,这样就不会TLE了#include#includeusing namespace std;原创 2010-06-16 01:36:00 · 4190 阅读 · 3 评论 -
POJ 2488 A Knight's Journey(DFS——骑士周游问题)
//要按字典序输出,所以要注意搜索顺序//最后一行不能留空行//唉,搜都要写这么久,还WA了那么多次,太弱了我#includeusing namespace std;int Case,X,Y;bool vis[50][50],ok;int dir[8][2] = {-1,-2,1,-2,-2,-1,2,-1,-2,1,2,1,-1,2,1,2};int path[30][2];bool legal(int x,int y){ if(x X || y Y)原创 2010-08-24 00:54:00 · 1239 阅读 · 0 评论 -
POJ 1657 Distance on Chessboard(搜索题)
//搜索题,王用宽搜解决,后用点和点的斜率解决,只有两种情况,要么1,要么2。//车直线判断即可,要么1,要么2。//象斜率判断加所在格子的黑白情况进行判断,我想出了一个好方法。行列同奇同偶,为白色,行列奇偶互异为黑色。//象如果在黑色格子上,他永远到不了白色格子,这是性质。#include#includeusing namespace std;bool vis[64];int dir[8][2] = {-1,-1,-1,0,-1,1,0,-1,0,1,1,-1,1,0,1,原创 2010-09-12 17:05:00 · 858 阅读 · 0 评论 -
POJ 1077 Eight(BFS八数码问题)
#include#includeusing namespace std;typedef int State[9];const int MAXS = 1000003;State st[MAXS],goal = {1,2,3,4,5,6,7,8,0};int dir[4][2] = {-1,0,1,0,0,-1,0,1};int head[MAXS],next[MAXS],fa[MAXS];//父亲指针用来记录状态之间的关联,方便打印解vector ans;//保存方案voi原创 2010-09-16 10:41:00 · 1186 阅读 · 0 评论 -
Sicily 1153 马的周游问题(DFS深度优先搜索)
//经典的深度优先搜索,必须剪枝才能通过,而且剪枝策略十分神奇,先走下一步可行拓展数最少的,看了大牛的题解才会的//也就是说假如当前结点有8个可以走的拓展点,对每个可行拓展点再计算它的可行拓展数,然后排序,先走那个可行拓展数最小的//就是先走那个最没前途的点,这样会更快,因为它这么没前途,要从其它点到达它就更难了,所以先走#include#include#include#includeusing namespace std;int dir[8][2] = {-1,-2,-1,原创 2010-09-18 01:29:00 · 4234 阅读 · 1 评论 -
POJ 3414 Pots(BFS倒水问题)
//BFS倒水问题,对于需要打印解得广搜题,必须保存搜索状态和状态的父亲指针,然后逆推,根据状态和状态之间的关系//判断属于那一种情况,并将解记录,还有POJ的1606也是同样类型的题,只不过要求有点点不一样,规模也有点点不一样//代码也就不重复贴了~#include#include#include#includeusing namespace std;bool vis[105][105];int A,B,C;vector ans;struct State{原创 2010-09-18 15:21:00 · 3535 阅读 · 0 评论 -
Sicily 1034 Forest(DFS)
//图的遍历,DFS,统计森林的宽度和深度,加上对环的判断//一道这么简单的题我一开始用BFS,结果WA到吐血,唉,我这个大水人#include#include#includeusing namespace std;bool vis[105],ok;int width[105];vector E[105];//邻接表int N,M,W,D,in[105];void dfs(int u,int d){ if(vis[u])//发现已搜过的点,证明存在环 {原创 2010-09-19 00:15:00 · 4130 阅读 · 0 评论 -
Sicily 1050 Numbers & Letters(DFS)
//DFS回溯,其实就是24点游戏的问题//没想到那么蛋疼,居然卡了我很久,显然的深搜题//回溯思路是这样的,5个数,先任意找2个数进行加减乘除,把这2个数运算后的结果当做一个数,按相同的方法搜下去//把4个数任取2个然后合并成3个,再继续搜下去//搜索树的深度为5, 第一层最多有C(2,5)*5种分支,这里5表示两个数做运算最多能产生5种结果//第二层C(2,4)*5...显然搜索树规模挺小的,加上除法这一运算产生的几率更小,因此这样搜过去必然没问题//我WA了很久的一个原因是初始原创 2010-12-26 00:43:00 · 5050 阅读 · 0 评论 -
Sicily 1039 Phone Home(DFS染色)
//dfs染色+二分答案#include#include#include#includeusing namespace std;const double MAX = 400;struct coord{ double x,y;}P[15];double calDis(coord a,coord b){ return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);}vector E[15];int G[15];//原创 2010-12-26 19:58:00 · 2744 阅读 · 0 评论 -
POJ 3107 Godfather(DFS)
//DFS水题,在树中找到满足下条件的点集,若删除当前点集的点,则将树划分成的最大连通块最小,DFS统计即可//统计方式只需要记录以当前结点为根的子树的结点数num,若要求父亲那一坨连通块只需要用N个点减去他所有儿子的num值即可#include#include#include#includeusing namespace std;const int MAX = 50005;const int INF = 200000000;int V[2*MAX],next[2*MAX原创 2011-02-24 22:24:00 · 2505 阅读 · 0 评论 -
Sicily 1140 国王的遗产(搜索|图论)
<br />//搜索,暴力//这题卡了我几天,检查到最后,居然是我的minID维护错误!我艹!这种错误居然卡了我几天!!!我就是一个超级无敌大水人!//不过卡了这几天也好,程序也经过不断优化//做法是预处理出以每个结点为根的子树有多少个结点cnt,以每个结点为根的子树最小编号minID//接着枚举所有边,暴力找出每个可行方案//在搜寻每一个可行方案,都以编号最小的结点作为根,这一个优化方案,可以省去搜索比较上下两部分的最小编号值//这题有几个重要结论是需要证明的//1、在树中仅存原创 2011-03-23 16:40:00 · 5382 阅读 · 2 评论 -
POJ 1979 Red and Black(BFS广度优先搜索)
//BFS统计可以行动的地图点数#include#include#includeusing namespace std;char map[22][22];bool in_queue[450];//标记是否进过队列int ans;int X,Y;inline int xy_p(int x,int y){ return y*X + x;}inline原创 2010-05-21 17:07:00 · 965 阅读 · 0 评论 -
Sicily 1024 Magic Island(DFS深度优先搜索)
#include#include#include#include#define INF -1000000000using namespace std;int _max;int n,k,u,v,d;struct Edge{ int u,v,d; Edge(int uu,int vv,int dd) { u = uu; v = vv; d = dd; }};vector E[10010];bool vis[10010];void dfs(int u原创 2010-07-12 01:09:00 · 3333 阅读 · 3 评论 -
POJ 3278 Catch That Cow(BFS广度优先搜索)
//BFS广度优先搜索,结合数据结构队列#include#includeusing namespace std;int arr[200000];int vis[200000];//已访问数组queue q1,q2;//用数据结构队列可节省搜索空间int deep;void set(int n,int deep,int k){ if(arr[n-1] != d原创 2010-02-20 16:00:00 · 1017 阅读 · 0 评论 -
POJ 1321 棋盘问题(DFS深度优先搜索/回溯法)
//DFS深度优先搜索/回溯法/八皇后类型题#includeusing namespace std;char map[9][9];int vis[9];//vis数组标记当前列是否已有其他棋从而提高效率int n,c,tot;void dfs(int l,int cnt)//cnt当前还有多少棋子要摆放{ if(cnt == 0) //递归边界,所有棋子已合理摆放原创 2010-03-03 12:26:00 · 1347 阅读 · 0 评论 -
POJ 3009 Curling 2.0(DFS深度优先搜索)
//DFS深度优先搜索,WA了5次就因为1个while后面的条件差了一个……教训啊!!!#includeusing namespace std;int map[22][22],possible,minstep,w,h,beginx,beginy;void dfs(int x,int y,int r,int di)//di是4个方向的编号 1:向上 2:向右 3:向下 4:向左原创 2010-03-03 00:47:00 · 931 阅读 · 0 评论 -
Sicily 1156 Binary tree(搜索)
//简单的搜索题#include#includeusing namespace std;struct Node{ char id; int left; int right; bool root;}node[1001];void print(int i)//递归打印先序遍历{ if(i == 0) return; cout << node[i]原创 2010-03-28 01:26:00 · 1928 阅读 · 0 评论 -
Sicily 1150 简单魔板 && 1151 魔板 (BFS深度优先搜索+康托展开状态压缩)
//BFS深度优先搜索+全排列编码(康托展开)#include#include#includeusing namespace std;int fact[9] = {0,1,2,6,24,120,720,5040,40320};//阶乘表string str;//空字符串struct move{ int num;//状态 string di;//操作记录原创 2010-04-13 11:48:00 · 4279 阅读 · 3 评论 -
POJ 3126 && Sicily 1444 Prime Path (BFS广度优先搜索)
//广度优先搜索#include#includeusing namespace std;const int SIZE = 10000;bool prime[SIZE];int step[SIZE];//树深度标志int base[4] = {1,10,100,1000};int main(){ for(int i = 0; i < SIZE; i++)原创 2010-04-30 16:20:00 · 1550 阅读 · 1 评论 -
POJ 3620 Avoid The Lakes(DFS深度优先搜索)
//深度优先搜索 POJ上最水的深搜#includeusing namespace std;int y,x,n,r,c,ans = 0,_max = -1;int map[102][102];bool vis[102][102];void dfs(int y,int x){ if(vis[y][x] == 1 || map[y][x] == 0) return;原创 2010-05-02 02:54:00 · 1514 阅读 · 1 评论 -
POJ 3561 Pseudographical recognizer(搜索)
//简单搜索题目//思路:在读入图形时开一个flag标记,标记这个图形一刀切的符号和坐标,同时记录这些符号的数量。//如果发现有两种不同符号,直接判错。发现没有一刀切符号,就是全部为.也判错//经过这一筛选,可以保证图是由一种符号切的,但不确定切得对不对//下一步判断:从一刀切的符号和沿线方向开始搜索,看数量是否正确,不正确判错#includeusing namespa原创 2010-05-02 23:13:00 · 1390 阅读 · 1 评论 -
Sicily 1308 Dependencies among Jobs(图的搜索)
//图的搜索遍历//“We assume that there is only one job processing in one moment”即一次只能处理1个任务,不能同时处理//因此不是关键路径中的求最早启动时间,害我WA了N次!//只要记录父亲指针,不断递归加上所有父亲他们所要花的时间就好了//G++中time是关键字来的,不要随便申请time这个名字的变量……//读取数据是个麻烦的环节#include#include#include#includeusin原创 2010-07-08 13:01:00 · 1005 阅读 · 0 评论 -
Sicily 1114 Food Cube(BFS广度优先搜索)
//BFS广度优先搜索//构完图后,对图中所有空的进行广搜,相当于从改点不断往外扩张,直到碰到cube或越界//每成功广搜一个坐标就意味着有一个空洞,但最后答案要除去最外层的空洞//因此ans - 1#include#include#includeusing namespace std;const int MAX = 102;int t,n,x,y,z,ans;int G[MAX][MAX][MAX];struct coord{ int x,y,z;原创 2010-07-11 19:09:00 · 2024 阅读 · 0 评论 -
Sicily 1350 Piggy banks(搜索|求图中环的个数)
//求图中环的个数//由于图中每个点的出度只有1,所以不存在一个点处于两个环的交点//因此,求环的个数时每个只需要考虑一次便可得出结果//由于数据规模庞大,写成递归形式容易暴栈//在读边的过程中先对自环进行预处理,之后对每个点进行不同的染色,对它的下一个点也染同样的颜色//这样染下去如果发现下一个要染的点和正在染的颜色相同,则说明存在一个环//换染色起点的同时也需要更换新的染色,才能保证对环的判断正确#include#includeusing namespace std;原创 2010-07-13 04:06:00 · 2899 阅读 · 2 评论 -
Sicily 1135 飞越原野(BFS宽度优先搜索)
<br />//BFS宽度优先搜索//G[x][y][k]表示走到(x,y)后还能飞k步的最优值#include<cstdio>#include<iostream>#include<cstring>#include<queue>using namespace std;const int MAX = 102;const int dir[4][2] = {1,0,-1,0,0,1,0,-1};int N,M,D,ans;int G[MAX][MAX][MAX];boo原创 2011-04-01 16:04:00 · 3423 阅读 · 0 评论