![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
搜索+图
文章平均质量分 65
clevermike
这个作者很懒,什么都没留下…
展开
-
POJ 1248 - Safecracker
比较简单的回溯题,就是没有注意题目中的最大字典序,卡了好几次,不过A掉之后也长了自信#include #include using namespace std;int per[30][8];int vis[15],num[5],t[5];char a[15];int n,sum,flag;bool check() //判断字典序{原创 2012-08-21 10:32:19 · 1950 阅读 · 0 评论 -
UVa 10318 - Security Panel
题意:给你一种在3*3矩阵上的开关灯方式,求按哪几个开关能把r*c矩阵上的灯全部点亮如果直接搜索,2^25再乘上对开关的操作肯定会超时,需要剪枝剪枝方法:每走到第k行时,判断第k-2行是否全部点亮(第k行的操作不会影响到前k-2行),如果没有全部点亮,cut掉#include #include int map[6][6],n,m,f;int vis[30];int an原创 2013-05-16 11:27:23 · 854 阅读 · 1 评论 -
URAL 1008 - Image Encoding(bfs坑爹题)
坑爹题,两种输入输出互相交换,裸bfs#include #include typedef struct{ int x; int y;} point;point q[310];int vis[15][15],mat[15][15];int dx[4]= {1,0,-1,0};int dy[4]= {0,1,0,-1};char ans[5]= {"RTLB"}原创 2013-07-31 21:31:24 · 906 阅读 · 0 评论 -
HDU 4635 - Strongly connected(2013MUTC4-1004)(强连通分量)
这道题在我们队属于我的范畴,最终因为最后一个环节想错了,也没搞出来题解是这么说的:最终添加完边的图,肯定可以分成两个部X和Y,其中只有X到Y的边没有Y到X的边,那么要使得边数尽可能的多,则X部肯定是一个完全图,Y部也是,同时X部中每个点到Y部的每个点都有一条边,假设X部有x个点,Y部有y个点,有x+y=n,同时边数F=x*y+x*(x-1)+y*(y-1),整理得:F=N*N-N-x*原创 2013-08-01 18:41:14 · 1100 阅读 · 0 评论 -
SGU 159 - Self-Replicating Numbers
题意:给你一个b和一个n,求在b禁止下的n位数的平方的后n位与其本身相等的所有解做这个题的时候一开始就尝试了推导一下这个题的规律,发现这个题的解很稀疏,完全可以搜索,然后我通过二项式对其每位进行展开,为了存储处理后的每位数字,我在每个递归栈里面加了一个数组,这样导致了爆栈,开到全局变量后,结果就出现错误了。然后纠结了半天,查过题解才发现,每位只需要判断前面那些位的数,然后存一个下一位的进位就可原创 2013-07-28 08:23:22 · 981 阅读 · 0 评论 -
HDU 3778 - Soccer(人肉)
这个题贴代码是为了反思的。。。比赛交的时候就TLE,赛后一直TLE,后来被某神指点后才发现自己把字符串定义在结构体里面,每次拷贝一个字符串,不TL才怪哎。。。丢死了。。。TL的代码还是不贴了#include #include #include using namespace std;typedef struct{ int id; //char s[50];原创 2013-08-12 20:18:55 · 949 阅读 · 0 评论 -
HDU 4394 - Digital Square(BFS+乘法原理)
不怎么难的一道题,还是各种挫烂臭,数组开小,没有跑到9,没有记录长度,没有更新最小值,总之是各种恶心不多说了,面壁去。。。#include #include #define LL long longtypedef struct{ LL num; int len;} digit;LL ans,n;LL p[18];int len;bool f;digit原创 2013-08-13 09:03:05 · 1217 阅读 · 0 评论 -
HDU 3955 - March(bfs)
题目是模拟一个游戏的,不太好读,它有一些乱七八糟的条件,很容易搞错http://www.cppblog.com/aswmtjdsj/archive/2011/08/18/153800.html这位大神的博客里讲得非常清楚各种绕,各种折腾,哎...还是代码能力不行啊继续苦练吧。。#include #include #define maxn 105#define inf原创 2013-08-17 19:17:50 · 914 阅读 · 0 评论 -
UVa 11504 - Dominos(缩点)
缩点之后dfs求连通块个数,水题#include #include #include #include using namespace std;#define maxn 100005vector G[maxn];vector H[maxn];stack S;int fa[maxn];int pre[maxn],lowlink[maxn],sccno[maxn],dfs_cl原创 2013-09-07 15:58:51 · 1091 阅读 · 0 评论 -
UVa 11396 - Claw Decomposition(二分图判定,染色法,dfs)
可推知,该图必为一二分图,然后分两部分着色,用dfs可以实现之前用了一种方法,每访问一个点加入删除它所在的所有边,然后标记与边相连的所有点,不知为什么错误了,望高手指点以下是AC代码#include #include #include #define maxn 305using namespace std;vector G[maxn];int vis[maxn];boo原创 2013-09-07 23:07:31 · 975 阅读 · 0 评论 -
UVa 208 - Firetruck
简单搜索题,找出从起点到终点的路径条数,但是这题直接用dfs会TL,不知道bfs会怎样解决方法:预处理一遍,将图中存在的点筛选出来,再用dfs,时间大幅缩短#include #include #include using namespace std;int map[25][25],vis[25],ans[25],node[25];int l,len;int a,x,原创 2013-05-16 09:54:26 · 749 阅读 · 0 评论 -
UVa 10422 - Knights in FEN
判断11步能否到达目标状态,类似八数码用dfs和hash判重做的,居然过了,还是数据量小的原因吧#include #include int f,ans;char s[30],d[30]={"111110111100 110000100000"};int k[30],min;int stex[8] = {-2,2,2,-2,1,1,-1,-1};int stey[8] =原创 2013-05-16 10:44:21 · 761 阅读 · 0 评论 -
UVa 193 - Graph Coloring
简单的搜索题需要优化的地方:记录结点的颜色,如果不符合,cut掉#include #include int m,n,max;int map[110][110];int node[110],ans[110];int dfs(int cur){ if(cur>n) { int k=0; for(int i=1;i<=n;i++原创 2013-05-16 10:37:44 · 640 阅读 · 0 评论 -
UVa 10047 - The Monocycle
求从起始点能到达终点的并且颜色与初始状态相同的最短路径bfs求最短i路问题,只不过需要记录坐标、颜色、方向三种状态#include #include typedef struct{ int x; int y; int cl; int di; int t;}node;node q[12550];char map[30][30];i原创 2013-05-16 10:57:13 · 831 阅读 · 0 评论 -
UVa 10624 - Super Number
dfs搜索+优化优化方法:减少取余次数,取余运算太耗时了#include #include int a[35],f,m,n,ans[35];long long mod(int x){ long long ans=0; for(int i=0;i<x;i++) { ans=ans*10+a[i]; if(!(i%12))原创 2013-05-16 11:14:53 · 757 阅读 · 0 评论 -
About next_permutation
对于“下一个排列”,一开始不懂子集与搜索的概念,就穷举了好多种情况,发现了其中的规律算法如下:1. 对给定的排列,从右到左扫描各个字符,如果这些字符从右到左是按字典序递增的,该排列就是最后一个,没有下一个排列。2. 从右到左扫描各个字符,如果第k个字符不是按字典序递增的,下一个排列可以将第k个字符增加一位后修改得到。3.将第k个字符增加一位后,可能与该字符前缀中的字符重复,那就原创 2012-08-23 15:21:44 · 749 阅读 · 0 评论 -
UVa 11624 - Fire!
简单的bfs求最短路径问题本题须经过两步bfs,一步是扩展着火点,第二步是判断人的逃离路径是否小于该点的着火时间#include #include #define inf 0x3f3f3f3ftypedef struct{ int x; int y;} node;node q[1000010];char map[1010][1010];int vis原创 2013-05-16 11:02:01 · 1117 阅读 · 2 评论 -
POJ 1111 - Image Perimeters
很简单的dfs,求的是图形块的周长,有一定规律,我就不细说了,详见代码#include #include using namespace std;char mat[25][25];bool vis[25][25];int n,m;void dfs(int x,int y){ if(xn||y>m)return; if(!vis[x][y]&&mat[x原创 2012-08-21 10:33:48 · 451 阅读 · 0 评论 -
POJ 1573 - Robot Motion
很简单的图遍历,模拟即可,但我还是想了好长时间,好在1遍AC了#include #include using namespace std;char mat[15][15];int vis[15][15];int n,m,k,ct,q;void dfs(int i,int j){ if(in||j>m)return; if(vis[i][j])原创 2012-08-21 10:35:27 · 583 阅读 · 0 评论 -
POJ 1564 - Sum It Up
这是一道通过率很高的水搜索题,可是不会搜索的我在用子集生成法搞了两个小时后,终于AC#include "stdio.h"#include #include using namespace std;int m,n,tt;int num[15],vis[15];int A[100005][15],T[15];void dfs(int p,int *B,int cur){原创 2012-08-21 10:37:18 · 622 阅读 · 0 评论 -
UVa 140 - Bandwidth
简单搜索题,求带宽最小的排列,增加了两个数组标记点对点的映射#include #include int map[30][30],n=0,m;int a[10],vis[10],check[30];int p[10],ans[10],min;int dfs(int cur){ if(cur==m) { int k=0; for(原创 2013-05-16 10:02:19 · 820 阅读 · 0 评论 -
UVa 10765 - Doves and bombs(割点,双连通分量)
求各点所在的双连通分量个数,水题#include #include #include #include #include #include #define maxn 10005using namespace std;struct Edge{ int u; int v;};struct node{ int no; int p;};int pre[ma原创 2013-09-10 09:36:57 · 1032 阅读 · 0 评论