寻找消失的数字(全排列问题的模板)c++

给你一个长度为 n 的数组,数字 0 到 n 有一个数字不在数组中,找出这个数字并输出这个数字。

输入格式
第一行一个整数 n,表示数组大小。
第二行 n 个整数,分别用空格隔开,表示数组元素。

输出格式
一个整数。

输入输出样例1
输入
3
0 1 2

输出
3

提示
1≤n≤10

//代码如下:

//使用回溯算法解决,回溯算法的运行方向递归的运行方向相反

#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

#define MAX_N 10

int n;

bool st[MAX_N];

vector<int> temp;

vector<int> num;

void print(vector<int> temp){

    for(int i=0;i<temp.size();i++)

    cout<<temp[i]<<" ";

    cout<<endl;

}

//深度优先搜索中使用回溯算法

void dfs(int index){

//index表示已经选择了多少个数字

    if(index==n){

        if(temp==num){

            for(int j=0;j<=n;j++){

                if(!st[j]){

                    cout<<j<<endl;

                    return;//回溯算法

                }

            }

        }

        return;

    }

    for(int i=0;i<=n;i++){

        if(!st[i]){

            st[i]=true;

            temp.push_back(i);

            dfs(index+1);//递归算法

            temp.pop_back();

            st[i]=false;        }}}

int main(){

    cin>>n;

//存储数组

    for(int i=0;i<n;i++){

        int number;

        cin>>number;

        num.push_back(number);

    }

    dfs(0);

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值