HDU 1504 Disk Tree

转载请注明出处:http://blog.csdn.net/a1dark

分析:查了一下这题、发现网上没有什么关于这道题的解题报告、其实题目意思挺好懂的、就是给你一些文件的目录结构、然后让你把它们组合在一起、然后按照目录结构输出、注意是字典序、这道题是一个模拟、主要是对结构体和指针的掌握、使用嵌套结构体模拟文件的同级和子级文件、然后进行读取、插入、查询等操作、代码如下(0ms):

 

#include<stdio.h>

#include<string.h>

struct node{  

    node *child;

    node *brother;

    char key[10]; 

};

int n,m;

node *root;

void getname(char *str,char *key,int &j)

{

    int i;

    for(i=0;str[j]!='\0'&&str[j]!='\\';i++,j++)

        key[i]=str[j];

    key[i]='\0';

}

node *insert(node *parent,char *key)

{

    node *p,*q,*t;

    if(!parent->child||strcmp(parent->child->key,key)>0)

    {

        t=new node;

        strcpy(t->key,key);

        t->child=NULL;

        t->brother=parent->child;

        parent->child=t;

        return t;

    }

    if(strcmp(parent->child->key,key)==0)

        return parent->child;

    for(p=parent->child,q=p->brother;q&&strcmp(q->key,key)<0;p=q,q=q->brother);

    if(!q||strcmp(q->key,key)>0)

    {

        t=new node;

        strcpy(t->key,key);

        t->brother=p->brother;

        p->brother=t;

        t->child=NULL;

        return t;

    }

    return q;

}

void read()

{

    char str[90],key[9];

    int i,cur;

    node *p;

    root=new node;

    root->child=NULL;

    scanf("%d",&n);

    for(i=m=0;i<n;i++)

    {

        cur=0;

        scanf("%s",str);

        getname(str,key,cur);

        for(p=insert(root,key);str[cur]!='\0';)

        {

            getname(str,key,++cur);

            p=insert(p,key);

        }

    }

}

void find(node *p,int k)

{

    int i;

    for(;p;p=p->brother)

    {

        for(i=0;i<k;i++)

            putchar(' ');

        puts(p->key);

        if(p->child)

            find(p->child,k+1);

    }

}

int main()

{

    int t;

    scanf("%d",&t);

    while(t--)

    {

        read();

        find(root->child,0);

        if(t)

            printf("\n");

    }

    return 0;

}


 

 

你可能感兴趣的:(tree)