合并区域算法

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

void print_vec(const std::vector<int> &ivec)
{
    int i = 0;
    for (std::vector<int>::const_iterator cit = ivec.begin();
            cit != ivec.end(); ++cit) {
        cout << *cit << "\t";
        ++i;
        if (i % 5 == 0) {
            cout << endl;
        }
    }
    cout << endl;
}

void delete_repeated_element(const std::vector<int> &ivec1, const std::vector<int> &ivec2,
                             std::vector<int> &ivec3, std::vector<int> &ivec4)
{
    int current_value;
    int before_value;
    int after_value;
    for (vector<int>::const_iterator cit = ivec1.begin(); cit != ivec1.end(); ++cit) {
        current_value = *cit;
        if (cit == ivec1.begin()) {
            before_value = *(ivec1.end() - 1);
        } else {
            before_value = *(cit - 1);
        }
        if (cit == ivec1.end() - 1) {
            after_value = *(ivec1.begin());
        } else {
            after_value = *(cit + 1);
        }
        if (find(ivec2.begin(), ivec2.end(), current_value) != ivec2.end()
                && find(ivec2.begin(), ivec2.end(), before_value) != ivec2.end()
                && find(ivec2.begin(), ivec2.end(), after_value) != ivec2.end()) {
            //cout << before_value << "\t" << current_value << "\t" << after_value;
        } else {
            ivec3.push_back(*cit);
        }
    }


    for (vector<int>::const_iterator cit = ivec2.begin(); cit != ivec2.end(); ++cit) {
        current_value = *cit;
        if (cit == ivec2.begin()) {
            before_value = *(ivec2.end() - 1);
        } else {
            before_value = *(cit - 1);
        }
        if (cit == ivec2.end() - 1) {
            after_value = *(ivec2.begin());
        } else {
            after_value = *(cit + 1);
        }
        if (find(ivec1.begin(), ivec1.end(), current_value) != ivec1.end()
                && find(ivec1.begin(), ivec1.end(), before_value) != ivec1.end()
                && find(ivec1.begin(), ivec1.end(), after_value) != ivec1.end()) {
            //cout << before_value << "\t" << current_value << "\t" << after_value;
        } else {
            ivec4.push_back(*cit);
        }
    }
}

void re_sort_element(const std::vector<int> &ivec3, const std::vector<int> &ivec4,
                     std::vector<int> &ivec5, std::vector<int> &ivec6)
{
    std::vector<int>::const_iterator ivec3_cit1;
    std::vector<int>::const_iterator ivec3_cit2;
    int flag = 1;
    for (vector<int>::const_iterator cit = ivec3.begin(); cit != ivec3.end(); ++cit) {
        if ( find(ivec4.begin(), ivec4.end(), *cit) != ivec4.end()) {
            if (flag == 1) {
                ivec3_cit1 = cit;
                flag = 2;
            } else {
                ivec3_cit2 = cit;
            }
        } else {
            continue;
        }
    }
    if (flag != 2) {
        return;
    }

    for (vector<int>::const_iterator cit = ivec3_cit2; cit != ivec3.end(); ++cit) {
        ivec5.push_back(*cit);
    }
    for (vector<int>::const_iterator cit = ivec3.begin(); cit != ivec3_cit2; ++cit) {
        ivec5.push_back(*cit);
    }

    std::vector<int>::const_iterator ivec4_cit1;
    std::vector<int>::const_iterator ivec4_cit2;
    flag = 1;
    for (vector<int>::const_iterator cit = ivec4.begin(); cit != ivec4.end(); ++cit) {
        if ( find(ivec3.begin(), ivec3.end(), *cit) != ivec3.end()) {
            if (flag == 1) {
                ivec4_cit1 = cit;
                flag = 2;
            } else {
                ivec4_cit2 = cit;
            }
        } else {
            continue;
        }
    }
    if (flag != 2) {
        return;
    }

    for (vector<int>::const_iterator cit = ivec4_cit2; cit != ivec4.end(); ++cit) {
        ivec6.push_back(*cit);
    }
    for (vector<int>::const_iterator cit = ivec4.begin(); cit != ivec4_cit2; ++cit) {
        ivec6.push_back(*cit);
    }

    if (!ivec5.empty() && ! ivec6.empty()) {
        if (ivec5.front() == ivec6.front()) {
            reverse(ivec6.begin(), ivec6.end());
        }
    }
}


void join_two_part(const std::vector<int> &ivec5, const std::vector<int> &ivec6,
                   std::vector<int> &ivec7)
{
    for (vector<int>::const_iterator cit = ivec5.begin(); cit != ivec5.end(); ++cit) {
        ivec7.push_back(*cit);
    }

    for (vector<int>::const_iterator cit = ivec6.begin()+1; cit != ivec6.end()-1; ++cit) {
        ivec7.push_back(*cit);
    }
}

int main()
{
    cout << "Hello world Begin!" << endl;

    /*
    *********************************************
    zone1:
        1   2   3   4   5

        11  12  13  14  15
    *********************************************
    zone2:
        11  12  13  14  15

        6   7   8   9   10

    *********************************************
    zone1+zone2
        1   2   3   4   5

        11  12  13  14  15

        6   7   8   9   10
    *********************************************
    zone+zone2(finally)
        1   2   3   4   5

        11              15

        6   7   8   9   10
    *********************************************
    */
    int a1[] = { 1, 2, 3, 4, 5, 15, 14, 13, 12, 11 };
    int a2[] = { 15, 14, 13, 12, 11, 6, 7, 8, 9, 10 };
    vector<int> ivec1(a1, a1+sizeof(a1)/sizeof(int));
    vector<int> ivec2(a2, a2+sizeof(a1)/sizeof(int));
    print_vec(ivec1);
    print_vec(ivec2);

    vector<int> ivec3;
    vector<int> ivec4;
    delete_repeated_element(ivec1, ivec2, ivec3, ivec4);
    print_vec(ivec3);
    print_vec(ivec4);

    vector<int> ivec5;
    vector<int> ivec6;
    re_sort_element(ivec3, ivec4, ivec5, ivec6);
    print_vec(ivec5);
    print_vec(ivec6);

    vector<int> ivec7;
    join_two_part(ivec5, ivec6, ivec7);
    print_vec(ivec7);

    cout << "Hello world End!" << endl;


    return 0;
}

  • output

Hello world Begin!
1       2       3       4       5
15      14      13      12      11

15      14      13      12      11
6       7       8       9       10

1       2       3       4       5
15      11
15      11      6       7       8
9       10
11      1       2       3       4
5       15
15      10      9       8       7
6       11
11      1       2       3       4
5       15      10      9       8
7       6
Hello world End!

Process returned 0 (0x0)   execution time : 0.022 s
Press any key to continue.



转载于:https://my.oschina.net/kimiz/blog/196583

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值