![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
搜索
文章平均质量分 72
logic_nut
这个作者很懒,什么都没留下…
展开
-
pku 1111 Image Perimeters(DFS)
数字和字符混合输入的时候,注意吃掉回车。用scanf("/n");由起始点深度优先搜索,八方向上相连的‘W’加入到栈中。其中由’W’向上下左右四个方向扩展的时候,碰到‘.’则perimeter++。#include using namespace std;int M,N,x,y,perimeter,index,my_stack[405][2];char field[22]原创 2009-07-19 13:18:00 · 465 阅读 · 0 评论 -
pku 1950 Dessert(暴搜)
#include using namespace std;#define plus 1#define minus 2#define point 3int N,sum;int ans[20];void output(){ printf("1"); for(int i=2;i<=N;i++) { if(ans[i]==plus) printf(" +原创 2009-12-05 15:54:00 · 788 阅读 · 0 评论 -
pku 1270 Following Orders(拓扑排序)
单纯从复杂度来讲的话,我的算法的效率是n^26,是完全没办法接受的。但因为题目已经告诉我们最后满足条件的序列最多只有300个,所以稍微弄点剪枝,就可以省很多时间了。0ms过的。#include #include using namespace std;int degree[26],count,ans[20];bool used[26];vector edges[26];原创 2009-10-29 12:30:00 · 803 阅读 · 0 评论 -
pku 1691 Painting A Board(据说可以用状态压缩DP)
用的搜索。先转换成有向图,如果矩形i在矩形j的上面且两个矩形挨着,就在节点i和节点j之间连一条边。剩下的就是搜索了,有点像拓扑排序。#include #include #define _clr(a,b) memset(a,b,sizeof(a))using namespace std;int N;struct rec{ int left_x,left_y,r原创 2009-10-08 18:30:00 · 774 阅读 · 1 评论 -
pku 1915 Knight Moves(双向BFS)
一直听到大家在说双向BFS,自己从来没用,于是今天也找了个题目写着玩。直接写的,没有参照别人代码。候选结点,用了两个队列保存。至于已经到达的状态,一个数组足矣。从起点出发到达的用正数表示,从终点出发到达的用负数表示。然后当整数碰到负数,说明找到了,结束。#include #include using namespace std;int n;int move[8][2原创 2009-09-20 20:16:00 · 883 阅读 · 0 评论 -
pku 1077 eight(据说有人用8中搜索算法做了这道题目)
状态有9!种,用的全排列的hash。首先写了个A*算法,0ms过了,但内存消耗挺大。其他方法的代码会陆续添加。好久没写过这种2500B+的代码。 A*#include #include #include #define _clr(a,b) memset(a,b,sizeof(a))using namespace std;const int maxn=3628原创 2009-09-20 17:11:00 · 875 阅读 · 0 评论 -
A*算法
很早以前做最短路径算法研究的时候就看过A*算法,本以为它的作用仅限于这一领域,后来才知道原来A*算法在整个搜索类算法中占有很重要的地位,甚至BFS都只能算是它的特例。下面就以A*算法在最短路径算法中的应用的一段描述来简要介绍下它。特别需要注意的是估价函数h(i)的两个特性。 A*算法和 Dijkstra算法极其相似,其实我觉得 Dijkstra算法就是h(i)=0的A*算法。Lik原创 2009-09-20 10:29:00 · 710 阅读 · 0 评论 -
pku 1724 ROADS(搜索,记录状态)
用DFS,BFS始终过不了,一直TLE,后来不得已上了priority_queue。方法有点类似dijkstra,节点比较的时候先比dist,dist相同的时候选择money小的。这种方法有一个好处是可以在priority_queue.top.position==end的时候直接结束,纯BFS,DFS则需要等到队列为空才能确定最后的答案。用一个数组dist_s[i][j]=k记录状态,表示原创 2009-09-01 17:16:00 · 760 阅读 · 0 评论 -
pku 3411 Paid Roads(搜索,卡节点访问数量)
题意:http://acm.pku.edu.cn/JudgeOnline/problem?id=3411寻找最短路径,但这个最短路径和通常意义上的不太一样,因为可以预付款,因此可能为了便宜的预付款而绕道而行。每个节点可能访问多次,每条边也可能访问多次。我的做法是DFS,卡节点访问数量。因为多绕一次道是为了增加至少一个预付款的节点,因此当一个节点的访问数量已经是N(我觉得应该是N-1,但那样原创 2009-09-01 09:58:00 · 963 阅读 · 2 评论 -
pku 2676 Sudoku(回溯)
给每行每列每个小方格都预备一个标记数组,出现的数打上标记。discuss说从后搜更快,按着做,0ms。深搜中全局变量的回溯是个很容易犯错的地方,要特别注意。#include using namespace std;#define N 9bool row[N][10],column[N][10],square[N][10];int map[N][N];int squa原创 2009-08-09 22:41:00 · 956 阅读 · 0 评论 -
pku 2531 Network Saboteur(不会搜索,用的枚举)
网络中有N个节点,可以把这N个节点划分成两个集合,同一个集合中的节点间进行通讯没有消耗,不同集合中的节点间进行通讯会有消耗,问如何划分集合,使得消耗最大化。 网上这题的解题报告极少,貌似有用搜索很快过的,可惜我不会,用的枚举,1000ms。 #include using namespace std;int mat[20][20];bool flag[20];int原创 2009-08-09 19:43:00 · 677 阅读 · 0 评论 -
pku 3278 Catch That Cow(广搜)
搜过的位置打上标记,没有必要再去一次了。。#include #include using namespace std;struct node{ int n,min;};bool used[200005];queue position;int BFS(int N,int K){ if(N==K) return 0; used[N]=true;原创 2009-08-09 17:32:00 · 522 阅读 · 0 评论 -
pku 1129 Channel Allocation(回溯(经典的图着色问题))
构图,如果两点互相影响,则连接一条边。剩下的就是图着色问题,相连的点不能用同一种颜色,问最少需要多少颜色。 深搜+一点点简单的剪枝,0ms#include using namespace std;bool map[26][26];int n,ans;int color[26];bool check(int position,int color_index)原创 2009-08-10 08:15:00 · 1287 阅读 · 6 评论 -
pku 2488 A Knight's Journey(深搜)
象棋棋盘,有一个棋子 马,给出一条路径,棋子走过了所有点一次,且仅一次。 深搜,有个小技巧是存一个数组int move[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}};好久没看书,在二维数组的初始化格式上纠结了一下。对于递归算法,下标作用的全局变量要慎用,有时候还不如给函数多加个参数来的省事。#in原创 2009-08-09 16:47:00 · 502 阅读 · 0 评论 -
pku 3256 Cow Picnic(简单DFS)
求有多少个点,是所有cow都能到达的。给每个点一个度,初始为0,然后依次以每头奶牛为起点进行DFS遍历,能够到达的点的度加1。#include #include using namespace std;int times[1005],K,N,M,pos[105],p[1005];bool visited[1005];struct node{ int s,t;原创 2010-04-01 13:45:00 · 652 阅读 · 0 评论