• 临接表


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

      

      

  • 相关阅读:
    如何写一个使用Web Service的IOS应用
    iPad定制相机界面
    IOS Quartz 2D 学习(1)
    cocoa Shallow Copy与Deep Copy
    sqlite3_prepare_v2返回1
    IOS 监听相机对焦事件
    UIImageView添加响应事件无响应
    二、Mongodb常用命令
    三、Mongodb Java中的使用
    多测师肖老师__第二个月python安装和pycharm安装
  • 原文地址:https://www.cnblogs.com/Duskcl/p/3815687.html
Copyright © 2020-2023  润新知