zoukankan      html  css  js  c++  java
  • 基础图论——邻接链表(利用数组建立)

    #include <iostream>
    #include <cstdio>
    using namespace std;
    int nxt[100], ver[100], head[100], dist[100];
    //如果用next会名字空间冲突
    int tot = 0;
    void add(int x, int y, int z)
    {
        ver[++tot] = y;
        nxt[tot] = head[x];
        head[x] = tot;
        dist[tot] = z;
    }
    void fun(int u)
    {
        for (int i = head[u]; i != 0; i = nxt[i])
        {
            cout << u << "->" << ver[i] << " "
                 << "distance is:" << dist[i] << endl;
        }
    }
    int main()
    {
        add(1, 2, 1);
        add(1, 3, 2);
        add(2, 3, 4);
        add(3, 1, 5);
        fun(1);
        int m;
        cin>>m;
        return 0;
    }
     
     
    方法2:
    创建结构体建立数组

    //邻接链表(链表实现)没有指针,只不过这里少开了一个数组,放到了结构体变量中而已,更容易理解

    struct nds{

        int y;

        int nxt;    //比起之前的那种邻接链表,少开了一个数组而已(nxt)

    };

    nds e[2100];

    int lk[2100],ltp;

    void ist(int x,int y){

        e[++ltp]={y,lk[x]};//这里记录终点和lk的上一个位置

        lk[x]=ltp;//更新lk记录的位置

        e[++ltp]={x,lk[y]};//无向边,所以这里处理两次

        lk[y] = ltp;  //更新lk记录的位置

    }

    void fun(int u){    //输出u节点对应的每个终点的位置

        for (int i = lk[u]; i!=0; i =e[i].nxt){

            cout << u << "->" << e[i].y<<endl;

        }

    }

    //请一定学会自己寻找乐趣!

    // dfs遍历邻接矩阵:

    bool f[2100];

    void dfs(int x) //x在这里表示图上的节点

    {

        if (f[x])

            return;

        f[x] = true; //记忆化

        for (int i = 1; i <= n; ++i)

            if (e[x][i])

                //注意这里是对一行扫描

        dfs(i); //接着由i走

    }

    // bfs遍历邻接链表:

    int q[2100],hd=0;   hd是队尾,q是队列

    bool f[2100];//记忆化

    void bfs(){

        q[hd=1]=1;//队列中第一个为1号节点

        for(int k=1;k<=hd;++k){

            for(int i=lk[q[k]];i!=0;i=e[i].nex)

                if(!f[e[i].y]){

                    q[++hd]=e[i].y;//继续入队

                    f[e[i].y]=true;

                }

        }

    }

     

    // dfs遍历邻接链表:

    void dfs(int x){

        if(f[x]) return ;

        f[x]=true;

        cout<<x<<" ";

        for(int i=lk[x];i!=0;i=e[i].nxt){

            dfs(e[i].y);

        }

        //这里函数执行完,也会自动结束

    }

    这篇文章,是又一个故事的结束...
    lazy's story is continuing.
  • 相关阅读:
    Shiro笔记(三)shiroFilter拦截器配置原则
    Shiro笔记(二)Shiro集成SpringMVC的环境配置
    Shiro笔记(一)Shiro整体介绍
    javaNIO的总结
    Redis的工作流程
    Nginx的配置安装和使用
    Linux下java开发环境配置总结
    php 基础知识 post 和get 两种传输方式的区别
    php 高级 多台web服务器共享session的方法
    php 基础知识 SESSION 和 COOKIE 的区别
  • 原文地址:https://www.cnblogs.com/Hello-world-hello-lazy/p/14408160.html
Copyright © 2011-2022 走看看