当前位置: 首页 > wzjs >正文

地方文明网站建设方案网站标题在哪里设置

地方文明网站建设方案,网站标题在哪里设置,手机网站seo免费软件,郑州网站推广优化外包公司学习目标: 掌握算法入门知识 学习内容: 回溯的定义例题详细步骤讲解(求子集、求全排列) 1. 回溯的定义 回溯法是一种通过 试探性搜索 来求解问题的算法思想。一个复杂问题的解决方案是由若干个小的决策步骤组成的决策序列&…

学习目标:

  • 掌握算法入门知识

学习内容:

  1. 回溯的定义
  2. 例题详细步骤讲解(求子集、求全排列)

1. 回溯的定义

回溯法是一种通过 试探性搜索 来求解问题的算法思想。一个复杂问题的解决方案是由若干个小的决策步骤组成的决策序列,解决一个问题的所有可能的决策序列构成该问题的解空间。解空间中满足约束条件的决策序列称为可行解。在约束条件下使目标达到最优的可行解称为该问题的最优解。其核心思想是:
(1)逐步构建候选解,并在每一步检查是否满足问题的约束条件。
(2)如果当前路径 不可能得到有效解,则立即 回退(回溯),尝试其他可能的路径。
(3)通过 递归 或 栈(迭代) 实现状态的深入和回退。

回溯法的特点:
(1)系统性:按某种顺序(如 DFS)遍历所有可能的解。
(2)避免无效搜索:通过剪枝(Pruning)提前终止不可能的分支。
适用于组合问题:如排列、组合、子集、棋盘类问题(N 皇后、数独)等。

2. 例题详细步骤讲解

2.1 子集树——求子集

例1:a[]={1,2,3},所有子集是:{},{3},{2},{2,3},{1},{1,3},{1,2},{1,2,3}(输出顺序无关)。

思路:解向量为x[],x[i]=0表示不选择a[i],x[i]=1表示选择a[i]。用 i 扫描数组 a ,也就是说问题的初始状态为(i=0,x的元素均为0),目标状态为(i=n,x为一个解,进行输出)。

  • 不选择a[i]元素,x[i]=0 ==> 下一个状态(递归)转向(i+1)。
  • 选择a[i]元素,x[i]=1 ==> 下一个状态(递归)转向(i+1)。

在这里插入图片描述
代码:

#include <stdio.h>void dfs(int a[], int n, int i, int x[]) {if (i >= n) {  //拿到一个解向量,进行输出for (int j = 0; j < n; j++) {if (x[j] != 0) {printf("%d ", a[j]); // 打印选中的元素}}printf("\n");} else {x[i] = 0; // 不选择a[i]dfs(a, n, i + 1, x);x[i] = 1; // 选择a[i]dfs(a, n, i + 1, x);}
}int main() {int a[] = {1, 2, 3}; // 示例数组int n = sizeof(a) / sizeof(a[0]); // 计算数组长度int x[n]; // 辅助数组,用于记录是否选择对应元素printf("数组的所有子集:\n");dfs(a, n, 0, x); // 从第0个元素开始回溯return 0;
}
2.2 排列树——求全排列

例2:有一个含 n 个整数的数组 a ,所有元素均不相同,求其所有元素的全排列。 如:a[]={1,2,3},得到结果是(1,2,3)、(1,3,2)、(2,3,1)、(2,1,3)、(3,1,2)、(3,2,1)。

思路:以1开头的两组后面两元素正好是交换位置的(1,2,3)、(1,3,2),以2、3开头的两组后面两元素正好也是交换位置。说明涉及一个元素交换。再看每两组刚好是1、2、3开头,也可以设置成交换位置得到,如1和1交换,2和1交换,3和1交换。也就是说,整个代码应该围绕交换进行。

DFS(a,n,i)  ==>  输出a所有元素即产生一种全排列         i=n-1
DFS(a,n,i)   ==> for (j=i;j<n;j++)		            其他情况i<n-1{ 交换a[i]与a[j];  DFS(a,n,i+1); 交换a[i]与a[j]; }

初始状态为(1,2,3),DFS(a,n,0)
(1)i=0,i<n-1,进行for循环,j=i=0,交换a[0]和a[0],得到(1,2,3),递归进入下一层DFS(a,n,1)
(2)i=1,i<n-1,进入for循环,j=i=1,交换a[1]和a[1],得到(1,2,3),递归进入下一层DFS(a,n,2)
(3)i=2,i=n-1,输出一种排列(1,2,3)
(4)回到(2),交换a[1]和a[1],得到(1,2,3)。j++=2,交换a[1]和a[2],得到(1,3,2),递归进入下一层DFS(a,n,2)
(5)i=2,i=n-1,输出一种排列(1,3,2)
(6)回到(2),交换a[1]和a[2],得到(1,2,3)。j++=3,循环结束,回到(1),交换a[0]和a[0],得到(1,2,3)。j++=1,交换a[0]和a[1],得到(2,1,3),递归进入下一层DFS(a,n,1)
(7)i=1,i<n-1,进入for循环,j=i=1,交换a[1]和a[1],得到(2,1,3),递归进入下一层DFS(a,n,2)
(8)i=2,i=n-1,输出一种排列(2,1,3)
(9)回到(7),交换a[1]和a[1],得到(2,1,3)。j++=2,交换a[1]和a[2],得到(2,3,1),递归进入下一层DFS(a,n,2)
(10)i=2,i=n-1,输出一种排列(2,3,1)
(11)回到(7),交换a[1]和a[2],得到(2,1,3)。j++=3,循环结束,回到(1),交换a[0]和a[1],得到(1,2,3)。j++=2,交换a[0]和a[2],得到(3,2,1),递归进入下一层DFS(a,n,1)
(12)第三个大分支省略… 应该会了吧!!!

在这里插入图片描述

代码:

#include <stdio.h>// 交换两个整数的值
void swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;
}// 回溯法生成全排列
void DFS(int a[], int n, int i) {if (i >= n - 1) {  // 递归出口:已处理完所有元素for (int k = 0; k < n; k++) {printf("%d ", a[k]);  // 打印当前排列}printf("\n");} else {for (int j = i; j < n; j++) {swap(&a[i], &a[j]);   // 交换a[i]和a[j]DFS(a, n, i + 1);     // 递归处理下一个位置swap(&a[i], &a[j]);   // 恢复交换(回溯)}}
}int main() {int a[] = {1, 2, 3};  // 示例数组int n = 3;  // 数组长度printf("数组的全排列:\n");DFS(a, n, 0);  // 从第0个位置开始生成全排列return 0;
}

文章转载自:

http://ND20zM1n.jprrh.cn
http://xkF6ij33.jprrh.cn
http://TPxF39Je.jprrh.cn
http://j4v1ws3o.jprrh.cn
http://Ug54jWKx.jprrh.cn
http://yeWf7p3l.jprrh.cn
http://oH0mmKyN.jprrh.cn
http://PuHyjsAo.jprrh.cn
http://bsAV2HJn.jprrh.cn
http://7epsFVE6.jprrh.cn
http://mLtnN0iI.jprrh.cn
http://FZc6jnJG.jprrh.cn
http://WRYD8l5H.jprrh.cn
http://wENM5y49.jprrh.cn
http://d0DomV6d.jprrh.cn
http://EH4CnxWh.jprrh.cn
http://hWHWkUdb.jprrh.cn
http://t9Ee77Hq.jprrh.cn
http://08fJagZt.jprrh.cn
http://5glmr9Gj.jprrh.cn
http://29uzXTDM.jprrh.cn
http://vxRx8OA0.jprrh.cn
http://WXBFB5Hm.jprrh.cn
http://0KSP8Tin.jprrh.cn
http://odHpLer0.jprrh.cn
http://Y2IeCbZC.jprrh.cn
http://0zsoe0zW.jprrh.cn
http://KrCg6ELN.jprrh.cn
http://c6tV4Dwi.jprrh.cn
http://4u7Rmqbv.jprrh.cn
http://www.dtcms.com/wzjs/605646.html

相关文章:

  • 网站集约化建设的意义网站整合推广
  • 怎么做网站后台界面网站模板设计工具
  • 滨州网站建设群晖wordpress配置文件
  • 做婚庆网站威海高端网站建设
  • 网站的购物车怎么做学校网站管理系统 php
  • 做销售如何在网站上搜集资料微信红包网站制作
  • 湖北省住房城乡建设厅网站查最好seo的wordpress
  • 设计风格网站eclipse开发网站用vue做前端
  • 产品网站做营销推广代做网页设计
  • 怎样通过手机建网站房地产市场最新动态
  • 网站模板文件不存在重庆妇科医院排名前三
  • 定制网站建设官网邢台网站制作哪里做
  • 网站保持排名吉安哪家做网站的公司好
  • 广东在线网站建设辽源做网站
  • 淘宝上面建设网站同心食品厂网站建设项目任务分解
  • 盘锦网站建设 盘锦建站推广 盘锦建站项目建设的背景怎么写
  • 90做网站做视频资源网站有哪些难点
  • 央企网站建设意义天津网站建设方案
  • 1 建设网站目的是什么意思网络技术服务合同模板
  • 如何诚信网站平台建设adsense用什么网站做
  • 免费网站设计平台定制网站哪个好
  • 门户网站如何做推广百度官网认证入口
  • 江西建设三类人员网站cms资源
  • 百度企业网站建设转换成wordpress
  • 新类型 网站网站建设佰首选金手指十四
  • 如何阿里巴巴网站做推广怎么申请免费的网站
  • 做网站交易平台挣钱吗网站开发遇到什么问题
  • 深圳宝安网站建设公司wordpress视频自动略图
  • 做网站原型现成的框架我有域名怎么建网站
  • 建设网站360wordpress导航图片尺寸