PTA 7-8 链表去重 (25 分)

PTA 7-8 链表去重 (25 分)

#include 
#include 
#include 
#include 
#include 
using namespace std;
int main()
{
    int a[100000][3],b[2],d[100000],*Find,adress,number,link,t,i,c=0,c1=0;
    map<int,int> N;
    for(int i=0; i<2; i++)
    {
        scanf("%d",&b[i]);
    }
    if(b[1]>0)
    {for(int i=0; i<b[1]; i++)
        {
            scanf("%d%d%d",&adress,&number,&link);
            a[adress][0]=adress;
            a[adress][1]=number;
            a[adress][2]=link;
        }
        int temp=b[0];
        for(i=0; a[temp][2]!=-1; i++)
        {
            if(temp!=a[temp][0]) return 0;
            N[a[temp][2]]=0;
            d[i]=a[temp][0];
            temp=a[temp][2];
            c++;
        }
        N[a[temp][2]]=0;
        d[i]=a[temp][0];
        c++;
        Find=new int[c];
        for(int i=0; i<c; i++)
        {
            Find[i]=0;
        }
        t=a[d[0]][0];
        N[abs(a[t][1])]=1;
        printf("%05d %d",a[t][0],a[t][1]);
        t=a[t][2];
        for(i=1; i<c; i++)
        {
            if(N[abs(a[t][1])]==0)
            {
                N[abs(a[t][1])]=1;
                printf(" %05d\n%05d %d",a[t][0],a[t][0],a[t][1]);
            }
            else
            {
                Find[i]=1;
                c1++;
            }
            t=a[t][2];
        }
        printf(" -1\n");
        int flag=0;
        if(c1==0) return 0;
        for(i=1; i<c; i++)
        {
            if(Find[i]==1)
            {
                if(flag==0)
                {
                    printf("%05d %d",d[i],a[d[i]][1]);
                    flag=1;
                }
                else
                {
                    printf(" %05d\n%05d %d",d[i],d[i],a[d[i]][1]);
                }   
            }
        }
        printf(" -1\n");
    }
    return 0;
}

你可能感兴趣的:(数据结构)