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;
}


 

 

posted on 2013-08-27 19:21  新一  阅读(178)  评论(0编辑  收藏  举报

导航