dfs概论+题目
dfs
程序员shy
2021年CSDN博客之星参与奖,「 游戏人生 」系列作者,立志写傻瓜也能看懂的技术文章,博客目标打造前端程序员从小白到大师全流程学习路线。有问题可私聊
展开
-
dfs棋盘对局(八皇后)
2021.5.27 dfs棋盘对局(八皇后)题目:输入一个n给定一个n*n的棋盘,请你在上面放置n个棋子,要求满足:每行每列都恰好有一个棋子,每条对角线上都最多只能有一个棋子 输入格式:共一行,一个整数n。 输出格式:共四行,前三行每行输出一个整数序列,用来描述一种可行放置方案,这三行描述的方案应该是整数序列字典序排在第一、第二、第三的方案。第四行输出一个整数,表示可行放置方案的总数。 数据范围: 6≤n≤13 输入样例: 6 输出样例: 2 4 6 1 3 5 3 6 2 5 1..原创 2021-05-27 22:29:45 · 172 阅读 · 0 评论 -
dfs迷宫(洛谷 P1605)
2021.5.25 用二维数组记录障碍物以及已走过的位置,每一次进入下一步都要判断是否有障碍物或者走过或者撞墙了,进入下一步后给1表示已走,然后将上下左右每一步都进行dfs搜索,做完后出来置0; #include<bits/stdc++.h> using namespace std; int bk[6][6]={0},n,m,t,sx,sy,fx,fy,ans=0; void dfs(int x,int y) { if(x<1||x>n||y<1||y>..原创 2021-05-25 11:16:07 · 186 阅读 · 0 评论 -
DFS深度优先遍历
2021.5.22 图分支算法 访问-遍历{DFS(深度优先遍历),BFS(广度优先遍历)} #include<bits/stdc++.h> using namespace std; const int maxn = 105; vector<int> e[maxn]; int bk[maxn]; // 某个点是否被访问 // 任务:输出所有可能的简单路径(不含环) vector<int> way; // 记录当前的访问路径 void dfs(int u/*现在在..原创 2021-05-22 20:59:05 · 99 阅读 · 0 评论 -
dfs全排列
2021.5.23 DFS全排列(洛谷)P4305 [JLOI2011]不重复数字 输入n(一般n<11)复杂度O(11!),求1~n的所有方案,循环访问所有的点,访问给1在不定长数组加入这个元素,再从此进入下一个点递归,直到所有层走完,输出一次方案,再将这个点从数组删除,将点置0回退(for里进入下一个),遍历完成所有方案 #include<bits/stdc++.h> using namespace std; const int maxn=15; int bk[maxn]; v原创 2021-05-23 20:38:06 · 188 阅读 · 0 评论 -
dfs连通块个数计数
每个点都进行作为起始点尝试,进入过给1讲与这个点相连的其他点当做第二起始点进行递归,直到同块所有点的访问为1,遇到起始点为0时代表找到一个新连通块 #include<bits/stdc++.h> using namespace std; int n,m,ans=0; vector<int>e[100]; int bk[7]; void dfs(int d) { if(bk[d]==1)return; bk[d]=1; for(auto g:e[d]) .原创 2021-05-23 20:12:54 · 258 阅读 · 0 评论 -
dfs选数
2021.5.23 选数(洛谷)P1036 [NOIP2002 普及组] 选数 分情况讨论:选或不选 总共n个数,选k个数相加判断素数,递归DFS,层数,计数小于k,和相加sum,分情况讨论:选或不选,到最后一层判断计数,再判断素数 #include<bits/stdc++.h> using namespace std; int n,k; int x[21]; int ans; int isp (int a) { int flag=0; if(a==2)return 1原创 2021-05-23 20:27:06 · 149 阅读 · 0 评论