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

边表+SPFA (使用指针+动态内存)的更多相关文章

  1. C和指针--动态内存分配

    1.为什么需要使用动态内存分配 数组的元素存储于内存中连续的位置上,当一个数组被声明时,它所需要的内存在编译时就被分配.当你声明数组时,必须用一个编译时常量指定数组的长度.但是,数组的长度常常在运行时 ...

  2. C++指针和动态内存分配

    指针和动态内存分配 数组与指针 数组 数组名是一个指针常量. 数组名传递数据时,传递的是地址. 数组作为函数参数时不指定第一维大小. 对象数组 A a[2] = {A(1,2)}; 执行时先调用有参数 ...

  3. C和指针 第十一章 动态内存分配

    声明数组时,必须指定数组长度,才可以编译,但是如果需要在运行时,指定数组的长度的话,那么就需要动态的分配内存. C函数库stdlib.h提供了两个函数,malloc和free,分别用于执行动态内存分配 ...

  4. 【C++】动态内存与智能指针

    C++常见的内存分配方式有三种: 从静态存储区分配,这里主要是存储局部static对象,类的static成员以及定义在函数之外的变量: 从栈内存分配,这里主要是存储函数内的非static对象: 从堆内 ...

  5. C++ Primer : 第十二章 : 动态内存之shared_ptr与new的结合使用、智能指针异常

    shared_ptr和new结合使用 一个shared_ptr默认初始化为一个空指针.我们也可以使用new返回的指针来初始化一个shared_ptr: shared_ptr<double> ...

  6. 《C和指针》 读书笔记 -- 第11章 动态内存分配

    1.C函数库提供了两个函数,malloc和free,分别用于执行动态内存分配和释放,这些函数维护一个可用内存池. void *malloc(size_t size);//返回指向分配的内存块起始位置的 ...

  7. C动态内存分配(C与指针实例)

    主要初步介绍malloc.free.calloc.realloc的基本.日后会有更详细的内容. malloc.free分别用于动态内存分配和释放. malloc会从内存池里提取一块合适的内存(连续的) ...

  8. C++学习笔记(十一):void*指针、类型转换和动态内存分配

    void*指针 void关键字表示“空类型”的概念.但是,这里的“空类型”不表示“任意类型”,而是表示不存在的意思,也就是说C/C++不允许你写语句void a,不存在类型为void的东西. void ...

  9. 数据结构基础——指针及动态内存分配(malloc)

    一.指针 C语言中的指针是一种数据类型,比如说我们用int *a;就定义了一个指针a,它指向一个int类型的数.但是这个指针是未初始化的,所以,一般的,我们都在创建指针时初始化它,以免出错,在还不吃的 ...

随机推荐

  1. 学习SQL的点点滴滴(三)-修改数据库的兼容级别

    语法 ALTER DATABASE database_name SET COMPATIBILITY_LEVEL = { 80 | 90 | 100 } 参数 database_name 要修改的数据库 ...

  2. discuz论坛与其它网站登录注册整合

    discuz论坛与其它网站登录注册整合 本文以discuz 7.0.0 php版本的论坛与 .net 2.0的网站注册登录整合为类.没有采用uc_center或第三方插件.以另类的方式实现.此方法实现 ...

  3. view抖动效果

    1.使用属性动画 ViewPropertyAnimator.animate(webView).translationX(20).setInterpolator(new CycleInterpolato ...

  4. NGUI之UILabel

    重要属性说明 overflow: Shrink Content: 意味着内容会自动被缩小以便适应区域.它在你使用动态字体的同时使用Keep      Crisp设置时有效,让字体变小,而不是缩放内容. ...

  5. 黑马程序员_JAVA之银行业务调度系统

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1.模拟实现银行业务调度系统逻辑,具体需求如下: 银行内有6个业务窗口,1 - 4号窗口为普通窗 ...

  6. VPS及LNMP(一)

    1.试用了搬瓦工.interserver.天翼云.网安互联之后,分别写下感受: 前两个是美国服务器,天翼云是国内服务器,网安互联是香港主机. a.搬瓦工非常便宜,512M的1年9.99刀,但是用了之后 ...

  7. Monty Hall Problem的一个图解,感觉不错

    从Coursera.org上的台大概率课讨论组里拿来的 如果不转换,选中汽车的概率是1/3,非常显然. 但转换后选中汽车的概率变成2/3就有点反直觉了,并不是太容易想明白. 因为转换其实有4种:汽车- ...

  8. CSS中的相对定位和绝对定位

    1.元素的position属性的值默认为static 就是没有定位,元素出现在正常的文档流中,,这个时候你给这个元素设置的left,right,bottom,top这些偏移属性都是没有效果的, 使用相 ...

  9. 使用maven创建web项目

    eclipse 4.5.2中集成了maven,所以我们不用再去安装插件啦. 点击file->new->other->maven->maven project 选择了worksp ...

  10. Inside The C++ Object Model - 03

    object Lessons 1.C++中布局以及存取时间上的的额外负担是由virtual引起的:virtual function.virtual base class.或是由于多继承引起的. 2.C ...