随笔分类 - 搜索
摘要:一道简单的搜索题目,建一个树,根节点是 0 ,连接的两个节点的距离是 1 ,求 到 根节点长度是2的节点的个数。 #include#includestruct node{ int next,to; int step;};node edge[100010];int tot;int head[100010];int N,D,ans;void Add(int x,int y){ edge[tot].to=y; edge[tot].next=head[x]; head[x]=tot++;}void DFS(int x,int step){ if(head[x]=...
阅读全文
摘要:题意:有n台电脑,然后给出电脑两两相连的链接速度,把这些电脑分成 两组,组内链接时间为0,求两组的最大链接速度。 一台电脑分两种情况进行DFS,属于第一组或属于第二组。#include#includeint n;int C[25][25];int f[25];int ans;void DFS(int a,int sum){ if(a==n) { if(sum>ans) ans=sum; return ; } int temp = 0; for(int i=0;i<a;i++) if(f[i]==2) ...
阅读全文
摘要:数独。。。 用DFS做。 刚开始想用一个列表表示某一列,某一行出现了哪些数,后来看到别人用二维数组挺方便的。 跟普通DFS差不多,不过要判断是否换行,能 深搜 到最后一个点 表示 DFS做完了。#include#include#includeusing namespace std;int map[12][12];bool row[12][12];bool col[12][12];bool g[12][12];bool DFS(int x,int y){ if(x==10) return true; bool flag=false; if(map[x][...
阅读全文
摘要:题意:一共有 T 组测试数据,每组先给两个数,w,h,表示给一个 高h,宽w的矩阵,‘#’表示不能走,‘.’表示能走,‘@’表示起始点,问,从起始点出发能访问多少个点。 简单的BFS题,以前做过一次。#include#includestruct node{ int x,y;};node q[450];int head,tail;int visit[25][25];int dx[]={1,0,-1,0};int dy[]={0,1,0,-1};int w,h;int sx,sy;int ans;int OK(int x,int y){ if(x>=1 && x=1 &
阅读全文
摘要:这道题跟poj 3411 差不多,不过这道题得用邻接表,不然就超时了,这道题我的代码跑了63MS,324K,我瞅了一下列表,好多人都跑了0MS,你NB!! DFS。 题意:有n 城市,r条路,有k这么多的钱。不同的路花费不一样,求从1到n最快且总花费不超过k的长度。这道题用邻接表还是比较快的,用POJ3411那道题用的保存信息的结构果断超时啊啊啊。。。用邻接表也TLE了几次,最后由增加了几句 if 语句,才算AC。/*FUCK!! 终于不超时了*/#include#includestruct node { int d,t,l; int next;}road[10010];i...
阅读全文
摘要:题意:有m条路,n座城市,走这些路是要付费的,每条路由两种付费方案,设一条路两端是a,b,如果走完这条路在b点付费的话,应付r,如果走这条路之前在c点付费的话,应付p,求从1端点走到n端点的最小费用。 DFS 刚开始想到了用搜索,自己搜索学的不好,有几个问题解决不了,首先就是每个点可以走多次,不能用0,1标记一个点是否走过,如果不标记就可能在一直走一条循环路,还有就是不会回溯,总之,自己就是不会写... 网上抄的别人的代码,每个点最多可以走3次,回溯也挺简单...#include#includeint n,m;struct node{ int a,b,c,p,r;};node ...
阅读全文

浙公网安备 33010602011771号