zoukankan      html  css  js  c++  java
  • 边表+SPFA (使用指针+动态内存)

    233

    只是我怕忘了怎么写指针操作 所以写一遍指针版的

    然而洛谷评测机不给力,400多ms过了数组的,600多ms过指针的。。。

    我想,指针的比数组的理解起来应该容易一点吧

    戳我是数组版的,NOIP时候还是用数组为好,万一出现了点bug不就爆零了啊

    #include <iostream>
    #include <cstring>
    #include <queue>
    using namespace std;
    struct edge
    {
        int v,w;
        edge*next;
    };
    edge*link[10001];
    int d[10001],n,m,s,X,Y,Z;
    bool v[10001];
    queue<int>q;
    void add(int u,int v,int w)
    {
        edge*p=new edge;
        p->v=v;
        p->w=w;
        p->next=link[u];
        link[u]=p;
    }
    void digui(edge*p)
    {
    	if(p==NULL)return;
    	
    	if(p->next!=NULL)
    		digui(p->next);
    	delete p;
    	p=NULL;
    }
    void remove()
    {
    	for(int i=1;i<=n;i++)
    		digui(link[i]);
    }
    int main()
    {
        cin >> n >> m >> s;//分别为顶点数 有向边数 源点
        for(int i=1;i<=m;i++)
        {
            cin >> X >> Y >> Z;//是有向边 x->y 长度z
            add(X,Y,Z);
        }
        q.push(s);
        v[s]=true;
        for(int i=1;i<=n;i++)
        	d[i]=2147483647;
        d[s]=0;
        while(!q.empty())
        {
            int x=q.front();
            q.pop();
            v[x]=false;
            for(edge*i=link[x];i!=0;i=i->next)
            {
                if(d[x]+i->w<d[i->v])
                {
                    d[i->v]=d[x]+i->w;
                    if(v[i->v]==false)
                    {
                        v[i->v]=true;
                        q.push(i->v);
                    }
                }
            }
        }
        for(int i=1;i<=n;i++)
        {
            cout << d[i] << ' ';
        }
        remove();
        return 0;
    }
    

    233

    233

  • 相关阅读:
    pycharm运行html文件报404错误
    css3 鼠标悬浮动画效果
    子代选择器和后代选择器的区别
    前端入门
    爬虫Scrapy框架
    BeautifulSoup
    爬虫之selenium使用
    爬虫之BeautifulSoup
    urllib模块
    爬虫基础
  • 原文地址:https://www.cnblogs.com/oier/p/5931897.html
Copyright © 2011-2022 走看看