• DS树+图综合练习--构建邻接表


    题目描述

    已知一有向图,构建该图对应的邻接表。邻接表包含数组和单链表两种数据结构,其中每个数组元素也是单链表的头结点,数组元素包含两个属性,属性一是顶点编号info,属性二是指针域next指向与它相连的顶点信息。单链表的每个结点也包含两个属性,属性一是顶点在数组的位置下标,属性二是指针域next指向下一个结点。

    输入

    1行输入整数t,表示有t个图

    2行输入n和k,表示该图有n个顶点和k条弧。

    第3行输入n个顶点。

    第4行起输入k条弧的起点和终点,连续输入k行

    以此类推输入下一个图

    输出

    输出每个图的邻接表,每行输出格式:数组下标 顶点编号-连接顶点下标-......-^,数组下标从0开始。

    具体格式请参考样例数据,每行最后加入“^”表示NULL。

    样例输入

    1
    5 7
    A B C D E
    A B
    A D
    A E
    B D
    C B
    C E
    E D

    样例输出

    0 A-1-3-4-^
    1 B-3-^
    2 C-1-4-^
    3 D-^
    4 E-3-^
    创建一个nodearray来存放头节点 在空间上就是竖的,对每个头节点创建一个nodelist来存放与他相连的节点,在空间上就是水平的。
    #include<iostream>
    using namespace std;
    struct Node
    {
            char name;
            int info;
            Node *next;
    };
    
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            int n,k,i,j;
            cin>>n>>k;
            Node *nodearray[n];
            Node *nodelist[n];
            for(i=0;i<n;i++)
            {
                nodearray[i]=new Node();
                nodelist[i]=new Node();
                cin>>nodearray[i]->name;
                nodearray[i]->info=i;
                nodelist[i]=nodearray[i];
            }            
            for(i=0;i<k;i++)
            {
                char ch1,ch2;
                cin>>ch1>>ch2;
                int info1,info2;
                for(j=0;j<n;j++)
                {
                    if(nodearray[j]->name==ch1)
                        info1=nodearray[j]->info;
                    if(nodearray[j]->name==ch2)
                        info2=nodearray[j]->info;
                }
                Node *node=new Node();
                node->name=ch2;
                node->info=info2;
                node->next=NULL;
                nodelist[info1]->next=node;
                nodelist[info1]=node;
            }
            for(i=0;i<n;i++)
            {
                cout<<i<<" ";
                Node *p=nodearray[i];
                cout<<p->name<<"-";
                p=p->next;
                while(p)
                {
                    cout<<p->info<<"-";
                    p=p->next;
                }
                cout<<"^"<<endl;
            }
        }
    }
     
     
     
  • 相关阅读:
    MySQL wrapped 连接池
    学习 memcache 心得
    memcachedb 加 memcached engine无法提高 示例检索的查询速度
    memcached+Mysql(主从) php 编程
    动态设置select与radio的默认值
    JSTL 自定义
    坦克大战 Java版
    给超链接加onclick事件
    图片查看器C#
    备份删除还原数据库
  • 原文地址:https://www.cnblogs.com/Liu269393/p/10222599.html
Copyright © 2020-2023  润新知