zoukankan      html  css  js  c++  java
  • 临接表

    2邻接表

    • 邻接表的C语言描述

    • 基本运算的算法——建立无向网的邻接表、求图中与顶点i邻接的第一个顶点、求图中顶点i相对于顶点j的下一个邻接点、若图G中存在顶点u,则返回该顶点在图中的位置、图的广度优先遍历、图的深度优先遍历2.

    #include<iostream>
    #include<string.h>
    #include<cstdio>
    using namespace std;
    class linjiebiao
    {
    public:
        struct Node
        {
            int data;
            Node * next;
            int flag;
            Node ():next(NULL) {}
            Node (int a,int b):data(a),flag(b),next(NULL) {}
        };
        Node * ljbsz;
        Node * cur;
        int *visit;
        int maxsize;
        linjiebiao(int tem = 10)
        {
            maxsize = tem;
            ljbsz = new Node[maxsize];
            for(int i = 0 ; i < maxsize ; i++)
            {
                //ljbsz[i].data = i;
                ljbsz[i].flag = 0;
            }
            cur = ljbsz;
            visit = new int[maxsize];
            memset(visit , 0 , sizeof(int)*maxsize);
        }
        void creat()
        {
    
            for(int i = 0 ; i < maxsize ; i++)
            {
                cout<<"please input "<<i<<" point"<<endl;
                cur = ljbsz+i;
                //freopen("in.cpp","r",stdin);
                while(1)
                {
                    int tem;
                    cin>>tem;
                    if(tem==-1)
                    {
                        cur -> next = NULL;
                        break;
                    }
                    else
                    {
                        Node * temnode = new Node(tem,1);
                        cur -> next = temnode;
                        cur = cur -> next;
                    }
                }
            }
        }
        void print()
        {
            for(int i = 0 ; i < maxsize ; i++)
            {
                cur = &ljbsz[i];
                cur = cur -> next;
                while(cur!= NULL)
                {
                    if(cur -> flag==1)cout<<cur->data<<" ";
                    cur = cur -> next;
                }
                cout<<endl;
            }
        }
        void chazhaodian(int a)//求图中与顶点i邻接的第一个顶点
        {
            cout<<ljbsz[a-1].next -> data<<endl;
        }
        void chazhaoweizhi(int a)//若图G中存在顶点u,则返回该顶点在图中的位置
        {
            cur = &ljbsz[a];
            cur = cur -> next;
            cout<<"yu "<<a<<" xiang lin de dian you:"<<endl;
            while(cur != NULL)
            {
                cout<<cur->data<<" ";
                cur = cur -> next;
            }
            cur = ljbsz;
        }
        void dfs(Node * tem)
        {
            while(tem)
            {
                if(tem->flag == 1)
                {
                    if(!visit[tem->data])
                    {
                        cout << tem->data << " ";
                        visit[tem->data] = 1;
                        dfs(ljbsz+tem->data);
                    }
                }
                tem = tem->next;
            }
        }
        void bfs()
        {
            cout<<"begining bfs!!!!!!!!!!!!!!!!!!!!!!!"<<endl;
            int temsz[maxsize+1];
            int Front;
            int rear;
            memset( visit , 0 , sizeof(int)*maxsize);
            temsz[0] = 0;
            Front = temsz[0];
            rear = Front + 1;
            visit[0] = 1;
            while(Front != rear)
            {
    
                cur = ljbsz[temsz[Front]].next;
                while ( cur != NULL )
                {
                    if(visit[cur->data]==0)
                    {
                        temsz[rear++] = cur -> data;
                        visit[cur->data] = 1;
                    }
                    cur = cur -> next;
                }
                cout<<temsz[Front]<<" ";
                Front ++;
            }
        }
    
    };
    int main()
    {
        int j = 5;
        linjiebiao duskcl(j);
        duskcl.creat();
        int tem = 2;
        cout<<"求图中与顶点2邻接的第一个顶点"<<endl;
        duskcl.chazhaodian(2);
        cout<<endl;
        cout<<"若图G中存在顶点2,则返回该顶点在图中的位置"<<endl;
        duskcl.chazhaoweizhi(tem);
        cout<<endl;
        cout<<"图的深度优先遍历"<<endl;
        duskcl.cur = &duskcl.ljbsz[0];
        duskcl.dfs(duskcl.ljbsz);
        cout<<endl;
        cout<<"图的广度优先遍历"<<endl;
        duskcl.bfs();
    }
    

      

      

  • 相关阅读:
    Javascript中最常用的55个经典技巧(转)
    Yahoo!网站性能最佳体验的34条黄金守则(转载)
    你误解了Windows的文件后缀名吗?
    你不知道的Spring配置文件
    Thrift 个人实战--Thrift 的序列化机制
    Thrift 个人实战--Thrift 网络服务模型
    Thrift 个人实战--初次体验Thrift
    HBase 实战(2)--时间序列检索和面检索的应用场景实战
    Kafka实战系列--Kafka API使用体验
    Kafka实战系列--Kafka的安装/配置
  • 原文地址:https://www.cnblogs.com/Duskcl/p/3815687.html
Copyright © 2011-2022 走看看