day06 继续在线编程

概要


这是参加阿里云的云计算7天实践训练营的第五天的笔记,老规矩,参加活动前的同学,可以前去白嫖近一年的云服务器,详情戳这里

笔记汇总


  1. day02 如何用快速搭建一个简历网站
  2. day03 打开浏览器就能写代码!打造自己的Web IDE(在线开发环境)
  3. day04 Linux云上桌面环境搭建
  4. day05 在线编程

今日笔记


**采取的算法**

编程过程所需要的算法是深度优先算法(Depth-First-Search)简称DFS算法,它可以很好的实现一个排列枚举。这里用一个123的排列来看看暴力的枚举算法是怎么实现的:

// 枚举全排列算法
public static void allArray(){
    // 求123 的全排列组合
    int i =0;
    for (int a = 1; a <=3; a++) {
        for (int b = 1; b <= 3 ; b++) {
            for (int c = 1; c <= 3 ; c++) {
                if(a != b && a !=c & b!=c){
                   i++;
                   System.out.println("第"+i+"种组合:"+a+b+c);
                }
            }
        }
    }
}
结果:
    第1种组合:1232种组合:1323种组合:2134种组合:2315种组合:3126种组合:321       

貌似看起来也不复杂嘛,但是如果排列的数多起来了,过程就变得繁琐起来,这里我们来看看DFS算法是怎么实现的:

public class DfsSearch {
    //深度优先算法的算123的全排列(思想基于枚举)
    static int[] a = new int[10]; //代表123中的某个数
    static int[] book = new int[10]; // 标记数字已经被选过
    static int n = 3; //代表要求1到n直接的全排列
    static int total = 0;

    public static void allArray(int step){
        //1.step表示当前出现在第几个位置
        if(step == n+1){
            //当step等于n+1时说明,前面n个位置已经排列好了数字
            System.out.print("第"+(total+1)+"种组合:");
            for (int i = 1; i <=n ; i++) {
                System.out.print(a[i]);
            }
            total++;
            System.out.println("n-------------------");
            return;
        }
        //2.当前第step位置还没到n+1,此时需要排列数字
        //  按照1.2.3...n的顺序依次尝试
        for (int i = 1; i <= n; i++) {
            //判断当前数字是否已经放入过了
            if(book[i] ==0){
                //表示当前数字可以使用
                a[step]=i;
                //标记为已使用,不能再次被使用
                book[i]=1;
                //第step位置已经放好数字,接下来需要放step+1
                allArray(step+1);
                book[i]=0;
            }
        }
        return;
    }
    public static void main(String[] args) {
        // 表示从第1个位置开始进行
        allArray(1);
        System.out.println("共计排列组合种数:"+total);
    }
}
结果:  
    第1种组合:1232种组合:1323种组合:2134种组合:2315种组合:3126种组合:321
    共计排列组合种数:6

基本模型:

public void dfs(int step){
    判断边界
      尝试每一种可能
    for (int i = 0; i <=n ; i++) {
        继续下一步
        dfs(step+1);
    }
}

以上就是DFS算法的一个介绍

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值