misschuer
导航
C++博客
首页
新随笔
联系
聚合
管理
<
2010年1月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
公告
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
as(2)
(rss)
bfs(1)
(rss)
dfs
(rss)
dp(2)
(rss)
Java(2)
(rss)
mathematics(3)
(rss)
netty
(rss)
prim
(rss)
tt
(rss)
贪心
(rss)
字典数
(rss)
文章分类
acm
(rss)
Java
(rss)
随笔档案
2018年4月 (1)
2017年12月 (4)
2015年5月 (2)
2013年11月 (1)
2012年8月 (2)
2011年11月 (1)
2011年9月 (1)
2011年8月 (1)
2011年5月 (1)
2011年4月 (2)
2011年3月 (16)
2010年10月 (1)
2010年4月 (3)
2010年3月 (1)
2010年1月 (4)
2009年12月 (2)
2009年5月 (3)
2009年4月 (15)
文章档案
2009年4月 (1)
阅读排行榜
1. hdu 1402 A * B Problem Plus (1880)
2. alchemy c 图像的缩放 (三次卷积)(1735)
3. A*算法求第k短路(1050)
4. 合并果子 (905)
5. hdu 1421 搬寝室 详解(822)
评论排行榜
1. hdu 1402 A * B Problem Plus (6)
2. hdu 1175 连连看(4)
3. ZOJ 3194 Coverage (3)
4. hdu 1421 搬寝室 详解(3)
5. 竞赛图 (2)
常用链接
我的随笔
我的评论
我参与的随笔
统计
随笔 - 61
文章 - 1
评论 - 18
引用 - 0
积分与排名
积分 - 24126
排名 - 728
百事通
hao123
WPL
杭电
松松
星和
最新评论
1. re: 竞赛图
怎么感觉理论就有问题,太坑爹了
--此最相思
2. re: hdu 1175 连连看
由于HDU的数据不强所以 代码是有点错误
--misschuer
3. re: hdu 1175 连连看
@Xy
我表示刚看到 然后测试了一下 可以过的吧
--misschuer
4. re: hdu 1175 连连看
评论内容较长,点击标题查看
--ahfywff
5. re: hdu 1175 连连看[未登录]
你的代码WA的
--Xy
(转)SPFA算法模版+邻接表
#include
<
iostream
>
#include
<
queue
>
using
namespace
std;
const
long
MAXN
=
10000
;
const
long
lmax
=
0x7FFFFFFF
;
typedef
struct
{
long
v;
long
next;
long
cost;
}
Edge;
Edge e[MAXN];
long
p[MAXN];
long
Dis[MAXN];
bool
vist[MAXN];
queue
<
long
>
q;
long
m,n;
//
点,边
void
init()
{
long
i;
long
eid
=
0
;
memset(vist,
0
,
sizeof
(vist));
memset(p,
-
1
,
sizeof
(p));
fill(Dis,Dis
+
MAXN,lmax);
while
(
!
q.empty())
{
q.pop();
}
for
(i
=
0
;i
<
n;
++
i)
{
long
from,to,cost;
scanf(
"
%ld %ld %ld
"
,
&
from,
&
to,
&
cost);
e[eid].next
=
p[from];
e[eid].v
=
to;
e[eid].cost
=
cost;
p[from]
=
eid
++
;
//
以下适用于无向图
swap(from,to);
e[eid].next
=
p[from];
e[eid].v
=
to;
e[eid].cost
=
cost;
p[from]
=
eid
++
;
}
}
void
print(
long
End)
{
//
若为lmax 则不可达
printf(
"
%ld\n
"
,Dis[End]);
}
void
SPF()
{
init();
long
Start,End;
scanf(
"
%ld %ld
"
,
&
Start,
&
End);
Dis[Start]
=
0
;
vist[Start]
=
true
;
q.push(Start);
while
(
!
q.empty())
{
long
t
=
q.front();
q.pop();
vist[t]
=
false
;
long
j;
for
(j
=
p[t];j
!=-
1
;j
=
e[j].next)
{
long
w
=
e[j].cost;
if
(w
+
Dis[t]
<
Dis[e[j].v])
{
Dis[e[j].v]
=
w
+
Dis[t];
if
(
!
vist[e[j].v])
{
vist[e[j].v]
=
true
;
q.push(e[j].v);
}
}
}
}
print(End);
}
int
main()
{
while
(scanf(
"
%ld %ld
"
,
&
m,
&
n)
!=
EOF)
{
SPF();
}
return
0
;
}
posted on 2010-01-11 20:45
此最相思
阅读(279)
评论(0)
编辑
收藏
引用
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
Powered by:
C++博客
Copyright © 此最相思