C#深度优先遍历Demo

实现深度优先遍历

假如让你说出123三个数字的全排列你可以很快说出来123,132,213,231,312,321,但是让你说出1~50总共20个数字的全排列是不是就没那么简单了呢?此时需要进行代码实现。

浅析深度优先遍历与广度优先遍历区别

深度优先遍历的非递归做法时采用栈;广度优先遍历的非递归做法时采用队列。
深度优先遍历是把每个分支深入到不能深入为止。具体的有先序遍历、中序遍历、后序遍历;广度优先遍历又称层序遍历,从上往下一层一层遍历。
其实区别很简单,使用时由于深度和广度的性质不同,对于栈和队列的使用就随之匹配。

栈与队列区别


栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。
栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表。

队列
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将是最后被删除的元素,因此队列又称为"先进先出"(FIFO—first in first out)的线性表。

深度优先遍历代码

using System;

namespace StudyOfDFSPractice
{
class Program
{
static int n = 0;
static int[] a;
static int[] book;
static int allsum = 0;
static void Main(string[] args)
{
Console.WriteLine(“请输入数字N:”);
n = int.Parse(Console.ReadLine());
Console.WriteLine(“数字1~” + n + “的全排列为:”);
a = new int[n + 1];
book = new int[n + 1];
dfs(1);
Console.WriteLine(“一共有”+allsum+“种排列方法”);
Console.ReadLine();
}

    public static void dfs(int step)
    {
        if (step == n + 1) 
        {
            //输出一种结果
            for (int i = 1; i < a.Length; i++)
            {
                Console.Write(a[i]);
                allsum ++;
            }
            Console.WriteLine();
            return; //返回到最近一次调用dfs函数的地方
        }
        for (int i = 1; i <= n; i++)
        {
            if (book[i] == 0)  
            {
                a[step] = i; 
                book[i] = 1; 
                dfs(step + 1);
                book[i] = 0; 
            }

        }
    }
}

}

截图

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值