深度优先DFS

深度优先(DFS)模板1:

void   DFS(int k)             //处理第k步
{   if  (k==n)                              //已经处理到第n步,到达目的状态 
               输出结果
    else                               //处理第k步
          for (int i=1; i<=m; i++)            //第k步中有m种可能
          {    处理第k步
                    DFS(k+1);//进入第k+1步
          }
}

例1:多重排列问题

输出1-m个数中取n个数的所有多重排列。例如n=2,m=3的所有多重排列为:
1    1
1    2
1    3
2    1
2    2
2    3
3    1
3    2
3    3

//从1到m中取n个数,允许重复取数

#include <iostream>
using namespace std;
int n,m, a[10];
void  DFS(int k)
{      if  (k==n)
        {       for (int i=0; i<n; i++)     cout<<a[i]<<" ";
                cout<<endl;
        }
        else
                for (int i=1; i<=m; i++)
                {    a[k]=i;    DFS(k+1);      }
}
int main()
{        cin>>m>>n;         DFS(0);    return 0;       }

//从1到m中取n个数,允许重复取数

#include <iostream>

using namespace std;

int n,m, a[10];

void  DFS(int k)

{      if  (k==n)

{       for (int i=0; i<n; i++)

cout<<a[i]<<" ";                 cout<<endl;           }

else

for (int i=1; i<=m; i++)

{    a[k]=i;      DFS(k+1);            }

}

int main()

{

cin>>m>>n;

DFS(0);

return 0;

}

深度优先DFS

时间: 2024-11-05 18:29:16

深度优先DFS的相关文章

c语言 深度优先 DFS

1 #include <stdio.h> 2 /* 3 输入一个数n,输出1~n的全排列,有多少种不同的排列? 4 //暴力枚举当然可以,写判断累死.for循环嵌套起来也是累. 5 6 这里运用的是depth first search,DFS 深度优先搜索的思想 7 装作n对应的是n张扑克牌,将其放入n个盒子里有多少种排列方法. 8 */ 9 int a[10],book[10],n;//c语言的全局变量在没有赋值以前默认为0;因此哲理的book数组无需全部再次赋初始值0; 11 void d

对邻接链表的深度优先(DFS)遍历

深度优先搜索算法在搜索过程中对节点进行涂色来指明节点的当前状态. 每个节点的初始颜色都是白色. 在节点被发现后变成灰色. 在其邻接链表被扫描完成之后变成黑色. 该方法可以保证每个节点只在一棵深度优先树中出现, 因此, 所有的深度优先树是不相交(disjoint)的. 除了创建深度优先搜索森林之外, 该方法还在每个节点盖上两个时间戳. 一个是被发现的时间(涂上灰色的时间), 另一个是完成对v的邻接链表扫描的时间(涂上黑色的时间). 这些时间戳提供了图的结构的重要信息. 当DFS算法返回时, 每个顶

深度优先dfs与广度bfs优先搜索总结+例题

DFS(Deep First Search)深度优先搜索 深度优先遍历(dfs)是对一个连通图进行遍历的算法.它的思想是从一个顶点开始,沿着一条路一直走到底,如果发现不能到达目标解,那就返回到上一个节点,然后从另一条路开始走到底,这种尽量往深处走的概念即是深度优先的概念. 简而言之:不撞南墙不回头 模板如下: void dfs(int t)//t代表目前dfs的深度 { if(满足输出条件||走不下去了) { 输出解; return; } else { for(int i=1;i<=尝试方法数;

【Python算法】遍历(Traversal)、深度优先(DFS)、广度优先(BFS)

图结构: 非常强大的结构化思维(或数学)模型.如果您能用图的处理方式来规范化某个问题,即使这个问题本身看上去并不像个图问题,也能使您离解决问题更进一步. 在众多图算法中,我们常会用到一种非常实用的思维模型--遍历(traversal):对图中所有节点的探索及访问操作. 图的一些相关概念: 简单图(Simple graph):无环并且无平行边的图. 路(path):内部点互不相同的链. 如果无向图G中每一对不同的顶点x和y都有一条路,(即W(G)=1,连通分支数)则称G是连通图,反之称为非连通图.

python数据结构与算法——图的广度优先和深度优先的算法

根据维基百科的伪代码实现: 广度优先BFS: 使用队列,集合 标记初始结点已被发现,放入队列 每次循环从队列弹出一个结点 将该节点的所有相连结点放入队列,并标记已被发现 通过队列,将迷宫路口所有的门打开,从一个门进去继续打开里面的门,然后返回前一个门处 1 """ 2 procedure BFS(G,v) is 3 let Q be a queue 4 Q.enqueue(v) 5 label v as discovered 6 while Q is not empty 7

图的遍历算法:DFS、BFS

在图的基本算法中,最初需要接触的就是图的遍历算法,根据访问节点的顺序,可分为深度优先搜索(DFS)和广度优先搜索(BFS). DFS(深度优先搜索)算法 Depth-First-Search 深度优先算法,是一种用于遍历或搜索树或图的算法.沿着树的深度遍历树的节点,尽可能深的搜索树的分支. 当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点. 这一过程一直进行到已发现从源节点可达的所有节点为止. 如果还存在未被发现的节点, 则选择其中一个作为源节点并重复以上过程,整个进程反复

数据结构?图的深度优先遍历

对于图这种数据结构,一般有两种遍历即深度优先(dfs),和广度优先(bfs),假设我们有如下这张图: 访问过程 现在假设计算0到其它点的路径,根据深度优先遍历: 1.获取0的所有邻边 1.2.5.6(默认此顺序) 2.再获取1的邻边(无),获取2的邻边(无),获取5的邻边(0,3,4) 3.0访问过,不再获取邻边:然后获取3的邻边(5,4) 4.5访问过,不再获取邻边:然后获取4的邻边(5,6) 5.5访问过,不再获取邻边:然后获取6的邻边(0,4) 6.0访问过,4被访问过,此时退到步骤2,即

算法系列笔记6(有关图的算法一—搜索,拓扑排序和强连通分支)

简单概念:对于图G(V,E),通常有两种存储的数据结构,一种是邻接矩阵,此时所需要的存储空间为O(V^2):第二种是邻接表,所需要的存储空间为O(V+E).邻接表表示法存在很强的适应性,但是也有潜在的不足,当要快速的确定图中边(u,v)是否存在,只能在顶点u的邻接表中搜索v,没有更快的方法,此时就可以使用邻接矩阵,但要以占用更多的存储空间作为代价:此外当图不是加权的,采用邻接矩阵存储还有一个优势:在存储邻接矩阵的每个元素时,可以只用一个二进位,而不必用一个字的空间. 图的搜索算法 搜索一个图示有

图的遍历

1.遍历 图的遍历与树的很相似,遍历满足:(1).对每一个顶点都得进行一次访问:(2).对其不能进行重复的访问,只能是一次:  对上次的一个补充: 当父类是模板类时,子类继承后,要是想调用父类的方法/数据,必须加上模板的作用域限定符:例 : Grapth<Type>::maxVertices;方可在子类中使用父类的数据或方法: 2.深度优先(DFS) DFS(depth first search)是:一个不断探查和回溯的过程,一个往死里整的过程:一条路必须走到死方可结束: 模型分析: 3.广度