zoukankan      html  css  js  c++  java
  • 散列4 Hashing

    题目:https://pintia.cn/problem-sets/1268384564738605056/problems/1294124786527993859
    题解:https://blog.csdn.net/Invokar/article/details/80383159
    代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <vector>
    #include <queue>
    using namespace std;
    int Arr[1001];
    
    int ConflictTimes(int i, int key, int tablesize)
    {    /* 计算每一个结点的冲突次数 */
        return (i - key%tablesize + tablesize) % tablesize;
    }
    
    int Hash(int key, int tablesize)
    {    /* 计算初始映射位置 */
        return key % tablesize;
    }
    
    struct cmp
    {    /* 比较函数 小顶堆 */
        bool operator() (int i, int j)
        {
            return Arr[i] > Arr[j];
        }
    };
    
    int main(int argc, char const *argv[])
    {
        int N, x, flag = 0;
        scanf("%d", &N);
        int Indegree[N];
        vector <vector<int> > v(N);
        priority_queue<int, vector<int>, cmp> q;
        for (int i = 0; i < N; i++)
        {    /* 计算每一个值的冲突次数也即入度 */
            scanf("%d", &x);
            Arr[i] = x;
            if (x >= 0)    /* 跳过空位 */
            {
                int pos = Hash(x, N);
                Indegree[i] = ConflictTimes(i, x, N);
                if (Indegree[i]) /* 如果入度不是0 */
                    for (int j = 0; j <= Indegree[i]; j++)
                        v[Hash(pos+j, N)].push_back(i);
                else    /* 如果入度为0则直接放入优先级队列 */
                    q.push(i);
            }
        }
        while (!q.empty())
        {    /* 如果队列不空,每次取队头元素,并将以队头元素为前驱的元素入度-1 */
            int pos = q.top();
            q.pop();
            if (flag == 1)
                printf(" ");
            printf("%d", Arr[pos]);
            flag = 1;
            for (int k = 0; k < v[pos].size(); k++)
                if (--Indegree[v[pos][k]] == 0)
                    q.push(v[pos][k]);
            
        }
        return 0;
    }
  • 相关阅读:
    WEB开发中合理选择图片格式
    Ext.ux.form.LovCombo bug修正
    Ext.grid.PropertyGrid 扩展
    BLOG代码高亮
    Box2D教程1创建碰撞世界
    Box2D教程2鼠标交互
    Box2D教程5碰撞检测
    Box2D教程3刚体绑定外观
    管窥HTML5
    Box2D教程4复杂刚体的复杂外观
  • 原文地址:https://www.cnblogs.com/simon-chou/p/13620159.html
Copyright © 2011-2022 走看看