ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

algs4 1.3.46栈可生成性问题中禁止出现的排列

2022-01-06 03:31:13  阅读:149  来源: 互联网

标签:algs4 sequence 46 1.3 int CanNotGenerate using include cout


  • 代码:
#include <stack>
#include <iostream>
#include <vector>
#include <random>
#include <time.h>

using std::cout;
using std::stack;
using std::vector;
using std::default_random_engine;
using std::uniform_int_distribution;


void GenerateRandomSeqence(int size, vector<int> &out)
{
    default_random_engine e;
    uniform_int_distribution<int> id(0, 20);

    e.seed(time(nullptr));
    cout << time(nullptr) << "\n";
    for (int i = 0; i < size; i++)
    {
        out.push_back(id(e));
    }
}

bool CanGenerateStack(vector<int> &sequence)
{
    int top = sequence.size() - 1;
    for (int i = top; i > 1; i--)
    {
        int minIndex = i;
        int curHead = sequence[i];
        for (int j = top - 1; j >= 0; j--)
        {
            if (sequence[j] >= curHead)
            {
                continue;
            }

            if (sequence[j] > sequence[minIndex])
            {
                cout << "a: " << sequence[minIndex] << ", b: " << sequence[j] << ", c: " << curHead << "\n";
                return false;
            }
            else 
            {
                minIndex = j;
            }
        }
    }
    return true;
}

void PrintVector(const vector<int> &sequence)
{
    for (auto &&v : sequence)
    {
        cout << v << " ";
    }
    cout << "\n";
}

int main()
{
    const int SEQUENCE_SIZE = 5;
    vector<int> sequence(SEQUENCE_SIZE);

    GenerateRandomSeqence(SEQUENCE_SIZE, sequence);
    PrintVector(sequence);
    bool ret = CanGenerateStack(sequence);
    cout << (ret ? "CanGenerate" : "CanNotGenerate") << "\n";
    return 0;
}
  • 运行结果
run 10 times !
=================== 1 ==================
1641409646
5 5 8 14 11 
CanGenerate
=================== 2 ==================
1641409647
5 8 3 2 1 
CanGenerate
=================== 3 ==================
1641409648
5 11 19 12 13 
CanGenerate
=================== 4 ==================
1641409649
5 13 14 1 3 
a: 1, b: 13, c: 14
CanNotGenerate
=================== 5 ==================
1641409650
5 16 9 10 14 
CanGenerate
=================== 6 ==================
1641409651
5 19 4 20 4 
a: 4, b: 19, c: 20
CanNotGenerate
=================== 7 ==================
1641409652
5 1 20 9 15 
a: 1, b: 5, c: 15
CanNotGenerate
=================== 8 ==================
1641409653
5 4 14 18 6 
a: 4, b: 5, c: 6
CanNotGenerate
=================== 9 ==================
1641409654
5 6 9 7 17 
a: 7, b: 9, c: 17
CanNotGenerate
=================== 10 ==================
1641409655
5 9 4 16 7 
a: 4, b: 5, c: 7
CanNotGenerate

标签:algs4,sequence,46,1.3,int,CanNotGenerate,using,include,cout
来源: https://www.cnblogs.com/ug-nan/p/15769524.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有