前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >回溯类问题框架

回溯类问题框架

作者头像
看、未来
发布2021-10-09 11:57:24
3150
发布2021-10-09 11:57:24
举报
文章被收录于专栏:CSDN搜“看,未来”

文章目录

N叉树的前序遍历

代码语言:javascript
复制
void preorder(Node* node) {
    cout << "value:" << node->val << endl;
    for (Node* n : node->children) {
        preorder(n);
    }
    return;
}

其实回溯,可不就是N叉树的前序遍历带上功能嘛。


回溯框架

代码语言:javascript
复制
vector<T> res;
void back_track(路径,选择列表){
	if(满足结束条件){
		res.push_back(路径);
	}

	for 选择 in 选择列表{
		做选择
		back_track(路径+1,选择列表);
		撤销选择
	}
}

示例

【C++】算法集锦(3):回溯,从入门到入土,七道试题精选、精讲、精练

4*4数独

代码语言:javascript
复制
#include<iostream>
#include<vector>

using namespace std;

bool check(vector<vector<int>>& vvec, int a, int b, int num) {
	for (int i : vvec[a]) {
		if (i == num) {
			return false;
		}
	}
	if (vvec[0][b] == num || vvec[1][b] == num || vvec[2][b] == num || vvec[3][b] == num) {
		return false;
	}

	return true;
}

bool numbers_game(vector<vector<int>>& vvec, vector<int>& vec, int a, int b) {
	if (b == 4) {
		a++;
		b = 0;
	}

	if (a == 4) {
		cout << "OK" << endl;
		return true;
	}
	
	for (int i : vec) {
		if (check(vvec, a, b, i)) {
			vvec[a][b] = i;
			
			return numbers_game(vvec, vec, a, b+1);
		}
		vvec[a][b] = 0;
	}

	return false;
}

int main() {
	vector<vector<int>> vvec = { {0,0,0,0},{0,0,0,0},{0,0,0,0} ,{0,0,0,0} };
	vector<int> vec = { 1,2,3,4 };
	
	cout << numbers_game(vvec, vec, 0, 0);
}

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/09/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • N叉树的前序遍历
  • 回溯框架
  • 示例
    • 4*4数独
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档