您的位置:首页 > 其它

hdu3790

2016-01-15 00:00 134 查看
http://acm.hdu.edu.cn/showproblem.php?pid=3790





View Code

#include
<
iostream
>

#define
M 1001

#define
Max 0x7fffffff

using

namespace
std;

int
n,m;

int
a,b,d,p;

int
s,t;

int
map[M][M];

int
cost[M][M];

int
de[M];

int
co[M];

int
visit[M];

int
len;

int
_min;

void
Init()
{

int
i,j;

for
(i
=
0
;i
<=
n;i
++
)
{

for
(j
=
0
;j
<=
n;j
++
)
{
map[i][j]
=
Max;
cost[i][j]
=
Max;
}
}
}

void
DJ()
{

int
i,j,p,k;

memset(visit ,
0
,
sizeof
(visit));

for
(i
=
1
;i
<=
n;i
++
)
de[i]
=
co[i]
=
Max;

de[s]
=
0
;
co[s]
=
0
;

for
(i
=
1
;i
<=
n;i
++
)
{
_min
=
Max; k
=
0
;

for
(j
=
1
;j
<=
n;j
++
)
{

if
(
!
visit[j]
&&
de[j]
<
_min)
{
_min
=
de[j];
k
=
j;
}
}

if
(_min
==
Max)
break
;
visit[k]
=
1
;

for
( p
=
1
; p
<=
n; p
++
)
{

if
(
!
visit[p]
&&
map[k][p]
!=
Max)
{

if
(de[p]
>
de[k]
+
map[k][p])
{
de[p]
=
de[k]
+
map[k][p];
co[p]
=
co[k]
+
cost[k][p];
}

else

if
( de[p]
==
de[k]
+
map[k][p]
&&
co[p]
>
co[k]
+
cost[k][p] )
{
co[p]
=
co[k]
+
cost[k][p];
}
}
}
}
}

int
main()
{

while
( cin
>>
n
>>
m, n
+
m )
{
Init();

int
i;

for
(i
=
0
;i
<
m;i
++
)
{
cin
>>
a
>>
b
>>
d
>>
p;

if
( map[a][b]
>
d)
{
map[a][b]
=
map[b][a]
=
d;
cost[a][b]
=
cost[b][a]
=
p;
}
}
cin
>>
s
>>
t;
DJ();
cout
<<
de[t]
<<
"

"
<<
co[t]
<<
endl;
}

return

0
;
}


wrong answer的代码:帮我看看错哪儿了?哎,有什么特殊例子啊





View Code

#include
<
iostream
>

#define
M 1001

#define
Max 0x7fffffff

using

namespace
std;

int
n,m;

int
a,b,d,p;

int
s,t;

int
map[M][M];

int
cost[M][M];

int
visit[M];

int
_min;

void
Init()
{

int
i,j;

for
(i
=
0
;i
<=
n;i
++
)
{

for
(j
=
0
;j
<=
n;j
++
)
{
map[i][j]
=
Max;
cost[i][j]
=
Max;
}
}
}

void
DJ()
{

int
i,j,p,k;

for
(i
=
1
;i
<=
n;i
++
)
{
_min
=
Max; k
=
0
;

for
(j
=
1
;j
<=
n;j
++
)
{

if
(
!
visit[j]
&&
map[
0
][j]
<
_min)
{
_min
=
map[
0
][j];
k
=
j;
}
}

if
(_min
==
Max)
break
;

visit[k]
=
1
;

for
( p
=
1
; p
<=
n; p
++
)
{

if
(
!
visit[p]
&&
map[k][p]
!=
Max)
{

if
(map[
0
][p]
>
map[
0
][k]
+
map[k][p])
{
map[
0
][p]
=
map[
0
][k]
+
map[k][p];
cost[
0
][p]
=
cost[
0
][k]
+
cost[k][p];
}

else

if
( map[
0
][p]
=
map[
0
][k]
+
map[k][p]
&&
cost[
0
][p]
>
cost[
0
][k]
+
cost[k][p] )
{
cost[
0
][p]
=
cost[
0
][k]
+
cost[k][p];
}
}
}
}
}

int
main()
{

while
( cin
>>
n
>>
m, n
+
m )
{
Init();

int
i;

for
(i
=
0
;i
<
m;i
++
)
{
cin
>>
a
>>
b
>>
d
>>
p;

if
( map[a][b]
>
d)
{
map[a][b]
=
map[b][a]
=
d;
cost[a][b]
=
cost[b][a]
=
p;
}
}
cin
>>
s
>>
t;
map[
0
][s]
=
0
;
cost[
0
][s]
=
0
;
memset(visit ,
0
,
sizeof
(visit));
DJ();
cout
<<
map[
0
][t]
<<
"

"
<<
cost[
0
][t]
<<
endl;
}

return

0
;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: