zoukankan      html  css  js  c++  java
  • 进阶实验8-2.1 逆散列问题 (30分)

     解题思路:

    1、有效数字(非负数)存入数组b[],并将b[]升序;

    2、按b数组从小到大的顺序,逐个计算hash地址pos,寻找出被使用hash地址pos(线性探测法解决冲突),再从b数组中寻找到最小的适合的数据,将此数存入ans中,并标记visit和vs数组,重复步骤2;

         

    #include <stdio.h>
    #include <string.h>
    #define Max 1000
    int cmp(int *x,int *y) {
        return *x-*y;
    }
    int main() {
        int n;
        scanf("%d",&n);
        int i,j,k=0;
        int a[n],b[n],visit[n],vs[n],ans[n];
        for(i=0; i<n; i++) {
            scanf("%d",&a[i]);
            if(a[i]>=0)
                b[k++]=a[i];
            visit[i]=0;
            vs[i]=0;
            ans[i]=0;
        }
        qsort(b,k,sizeof(b[0]),cmp);
        int flag,cnt=0;
        for(i=0; i<k; i++) {
            for(j=0; j<k; j++) {
                if(visit[j])continue;
                flag=1;
                int pos;
                for(pos=b[j]%n;;) {
                    if(!vs[pos]&&b[j]==a[pos]) {
                        ans[i]=b[j];
                        vs[pos]=1;
                        visit[j]=1;
                        flag=0;
                        break;
                    }
                    if(!vs[pos])
                        break;
                    pos++;
                    if(pos==n)
                        pos=0;
                }
                if(!flag)
                break;
            }
            
        }
    
        for(i=0; i<k; i++) {
            if(i)
                printf(" ");
            printf("%d",ans[i]);
        }
        printf("
    ");
        return 0;
    }
  • 相关阅读:
    随机二分图
    城市旅行
    JZPKIL
    线性基专题总结
    杜教筛专题总结
    [NOI2018]你的名字
    P1120 小木棍 [数据加强版]
    先序遍历
    P1736 创意吃鱼法
    P2258 子矩阵
  • 原文地址:https://www.cnblogs.com/snzhong/p/12577400.html
Copyright © 2011-2022 走看看