首页 > 编程语言 >【算法】DFS

【算法】DFS

时间:2024-02-13 22:22:23浏览次数:29  
标签:return int dfs 算法 搜索 DFS

DFS

DFS 是一种遍历或搜索图、树或图像等数据结构的算法,当然这个图、树未必存储下来。常见的是通过某种关系构造出的搜索树,搜索树一般是排列型搜索树和子集型搜索树。DFS 一般使用栈或递归。

一道模板题

#include<bits/stdc++.h>
using namespace std;
const int N = 50;
int n,mp[N][N],ans;
bool vl[N],ls[N],ys[N];
bool isOk(int x, int y) {
  if(vl[y] || ls[x + y] || ys[x - y + 10]) return false;
  else return true;
}
void dfs(int d) {
  if(d > n) {
    ans ++;
    return ;
  }

  for(int i = 1; i <= n; i ++) {
    if(isOk(d,i)) {
      vl[i] = true;
      ls[d+i] = true;
      ys[d - i + 10] = true;
      dfs(d + 1);
      vl[i] = false;
      ls[d + i] = false;
      ys[d - i + 10] = false;
    }
  }

}
int main() {
  cin>>n;
  dfs(1);
  cout<<ans;
}

标签:return,int,dfs,算法,搜索,DFS
From: https://www.cnblogs.com/zc-study-xcu/p/18014884

相关文章

  • 基于NIQE算法的图像无参考质量评价算法matlab仿真
    1.算法运行效果图预览   2.算法运行软件版本MATLAB2022a  3.算法理论概述      NIQE(NaturalnessImageQualityEvaluator)算法是一种无参考图像质量评价算法,旨在评估图像的自然度,即图像看起来是否像自然场景。NIQE基于一组“质量感知”特征,并将其拟合到MV......
  • OpenCL规约算法例子
    本文给出一个规约算法求数组的和的例子。本例子求20000000(两千万)个整数的和。运算过程分成了两步,第一步是GPU对每一个工作组内规约求和,然后将每个工作组的求和结果放到数组中输出。第二步是对输出的数组用CPU求和。实际运行对比发现GPU的效率不如用CPU直接求和。下述算法运行环境......
  • DFS基础与回溯
    回溯法简介回溯法一般使用DFS(深度优先搜索(递归))实现,DFS是一种遍历或搜索图,树或图像等数据结构的算法。上述数据结构不保存下来就是回溯法。常见的是搜索树,排列型搜索树(节点数一般为n!)与子集型搜索树(节点数一般为2n)。DFS从起始点开始,沿着一条路尽可能深入,直到无法继续回溯到上......
  • 2024牛客寒假算法基础集训营3
    M题智乃的36倍数(normalversion)错解幂运算写成了乘~#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'#defineintlonglong#definedebug(x)cout<<x<<""<<endl;#define_debug(a,n)for(inti=0;i<n;i++)......
  • 2024牛客寒假算法基础集训营1
    2024牛客寒假算法基础集训营1A解题思路:按照\(dfs\)出现顺序暴力判断即可。代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;usingpii=pair<ll,ll>;#definefifirst#definesesecondusingi128=__int128_t;usingpiii=pair<ll,pai......
  • Codeforces Round 303 (Div. 2)C. Kefa and Park(DFS、实现)
    @目录题面链接题意题解代码总结题面链接C.KefaandPark题意求叶节点数量,叶节点满足,从根节点到叶节点的路径上最长连续1的长度小于m题解这道题目主要是实现,当不满足条件时直接返回。到达叶节点后统计答案,用vector存图的话,无向图时,叶节点的边只有一条,也就是\(g[i].size()......
  • Poj 2531 Network Saboteur(DFS+剪枝)
    2531--NetworkSaboteur(poj.org)#include<iostream>#include<cstring>usingnamespacestd;constintN=30;intC[N][N],n,ans;boolgroup[N];voidDFS(intnum,intsum){group[num]=true;inttmp=sum;for(inti=1;i<=n;i++){......
  • boruvka 算法学习笔记
    boruvka算法就是最小生成树B算法。B算法的思路是每次对每个连通块,求出它能连出去的权值最小的边,然后再按边权从小到大合并。由于每次操作连通块数至少减半,所以复杂度是\(O(m\logn)\)。1.CF1305GKuroniandAntihype题意:长为\(n\)的数列\(a\),现在要选择全部数,每一次你......
  • 微分积分及其运算法则成对列举
         ......
  • 【算法】排序
    冒泡排序思想:每一轮确定一个最大值移到最右边。点击查看代码for(inti=n;i>=1;i--){ for(intj=1;j<i;j++){ if(a[j]>a[j+1])swap(a[j],a[j+1]); } }选择排序思想:与冒泡相似。点击查看代码for(inti=n;i>=1;i--){ intmax_id......