栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

dfs(深度优先搜索)基本模型-c语言

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

dfs(深度优先搜索)基本模型-c语言

dfs的解决问题的思路:
    先解决当下该如何做。然后再考虑下一步如何做。
问题:

输入一个数n,输出1~n的全排列。 分析:

形象化问题:

​ 假如有编号为1,2,3的三张扑克牌和编号为1,2,3的三个盒子。

​ 现在需要将3张扑克牌分别放到3个盒子里,每个盒子只能放一张。

约定一个顺序:每当需要输出一个数时,总是先输出1,然后是2,其次是3。 代码实现:

#include 
int a[10], book[10], n;//c语言的全局变量在没有赋值以前默认值是0  !

void dfs(int step) {//step表示第几个盒子
	int i;//一定要定义在内部,不能定义为全局变量,因为要在内部使用。
	if (step == n + 1) {//如果没盒子了
		for (i = 1; i <= n; i++) {
			printf("%d ", a[i]);
			
		}
		printf("n");
		return;//表示返回上一步!!
	}
	for (i = 1; i <= n; i++) {
		if (book[i] == 0) {//如果牌i还在的话
		a[step] = i;//将i扑克牌放在第step个盒子里
		book[i] = 1;//给牌i做标记,标记已经用过了
		dfs(step + 1);//下一个盒子
		book[i] = 0;//将刚才尝试的扑克牌收回,然后再进行下一次
		
		}
		
		
	}
	
	return;
}
int main() {
	
	printf("请输入有几个数:");
	scanf_s("%d ", &n);
	
	dfs(1);//首先站在1号盒子前
	
	getchar(); getchar();
	return 0;
}
总结:

dfs–先解决第一步怎么办,第二步就是重复第一步即可。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/703344.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号