• c++ 广度优先搜索


    #include <iostream>
    using namespace std;
    
    const int verMax=9;
    const int queMax=10; // >=9皆可
    
    struct node//声明图形顶点结构
    {
    int vertex;
    struct node *next;
    };
    
    typedef struct node *graph;
    struct node head[verMax];//声明顶点结构数组
    int que[queMax];
    int front=-1;
    int rear=-1;
    int visit[verMax];//查找记录//队列的存入
    
    int enque(int v)
    {
        if(rear>=queMax)//队列已满
        return -1;
    else
    {
        rear++;//对了尾端指针后移
        que[rear]=v;//将值存入队列中
        return 1;
        }
    }
    //队列的取出
    int deque()
    {
        if(front==rear)//队列已空
            return -1;
        else
        {
            front++;
            return que[front];
        }
    }
    //广度优先搜索法
    void BFS(int v)
    {
        graph point;
        enque(v);//存入队列
        visit[v]=1;//已查找
        cout<<"["<<v<<"]==>";
        while(front!=rear)
        {
            v=deque();
            point=head[v].next;
            while(point!=NULL)//读入邻接列表所有顶点
            {
                if(visit[point->vertex]==0)
                {
                    enque(point->vertex);//存入队列
                    visit[point->vertex]=1;//已查找过的顶点
                    cout<<"["<<point->vertex<<"]==>";
                }
                point=point->next;
            }
        }
    }
    //建立邻接顶点至邻接列表内
    void create_graph(int v1,int v2)
    {
        graph point,New;
        New=(graph)malloc(sizeof(struct node));
        if(New!=NULL)
        {
            New->vertex=v2;//邻近顶点
            New->next=NULL;
            point=&(head[v1]);
            while(point->next!=NULL)
                point=point->next;
            point->next=New;//串连在列表尾端
        }
    }
    //输出邻接列表内数据
    void print_graph(struct node *head)
    {
        graph point;
        point=head->next;//设置point为首节点
        while(point!=NULL)
        {
            cout<<"["<<point->vertex<<"] ";
            point=point->next;
        }
        cout<<endl;
    }
    //主程序
    void main()
    {
        int node[20][2]={
        {1,2},{2,1},{1,3},{3,1},{2,4},{4,2},{2,5},{5,2},{3,6},{6,3},
        {3,7},{7,3},{4,8},{8,4},{5,8},{8,5},{6,8},{8,6},{7,8},{8,7}};
        int i;
        for(i=0;i<verMax;i++)
        {
            head[i].vertex=i;
            head[i].next=NULL;
        } 
        for(i=0;i<verMax;i++)
            visit[i]=0;
    
        for(i=0;i<20;i++)
            create_graph(node[i][0],node[i][1]);
    
        cout<<"======Graph======"<<endl;
        for(i=1;i<verMax;i++)
        {
            cout<<"Vertex["<<i<<"]: ";
            print_graph(&head[i]);
        } 
        //广度优先搜索
        cout<<"Bradth-First-Search:"<<endl<<"&BEGIN==>";
        BFS(4);
        cout<<"END&"<<endl;
    }
    书搞进脑袋 创新 创造; 积极
  • 相关阅读:
    字符串右移n位(C++实现)
    字符串反转实现(C++)
    MSDN无法显示该页的解决办法
    设计模式——单例模式 (C++实现)
    设计模式——工厂模式 (C++实现)
    设计模式课程 设计模式精讲 24-2 中介者模式coding
    设计模式课程 设计模式精讲 25-1 责任链模式讲解
    设计模式课程 设计模式精讲 23-3 命令模式源码解析
    设计模式课程 设计模式精讲 23-2 命令模式coding
    设计模式课程 设计模式精讲 22-3 备忘录模式源码解析
  • 原文地址:https://www.cnblogs.com/tobetterlife/p/12170949.html
Copyright © 2020-2023  润新知