0 点赞 评论 收藏
分享
2016-09-19 21:35
广东工业大学 前端工程师 :我的代码:版本升级
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
publicclass
Main
{
List
<
Node
> finalList =
new
ArrayList
<>
()
;
int min =
Integer
.MAX_VALUE;
publicstaticvoid
main
(
String
[]
args
)
{
Main main =
new
Main
()
;
main.
init
()
;
}
privatevoid
init
()
{
Scanner
scanner
=
new
Scanner
(
System
.in)
;
String
[] first = scanner.
nextLine
()
.
split
(
" "
)
;
int start =
Integer
.
valueOf
(first[
0
])
;
int end =
Integer
.
valueOf
(first[
1
])
;
List
<
Node
> lists =
new
ArrayList
<>
()
;
while
(scanner.
hasNext
())
{
String
[] now = scanner.
nextLine
()
.
split
(
" "
)
;
Node node
=
new
Node
(Integer.
valueOf
(
now
[
0
])
,
Integer.
valueOf
(
now
[
1
])
,
Integer.
valueOf
(
now
[
2
]))
;
lists.
add
(node)
;
}
solve
(lists, start, end)
;
}
void
solve
(
List<Node>
lists,int
start,int
end
)
{
Collections
.sort(
lists
,
new
NodeComp())
;
List
<
Node
> tmp =
new
ArrayList
<>
()
;
Node fir =
new
Node
(
start
,
start
,
0
)
;
dfs
(fir,
lists
, tmp,
end
,
0
,
-
1
)
;
// System.out.println(finalList);
if
(finalList.
size
()
!=
0
)
{
StringBuffer sb =
print
(finalList)
;
sb.
append
(
"("
+ min +
")"
)
;
System
.
out
.println(
sb
.toString())
;
}
}
private
StringBuffer
print
(List<
Node
>
list
)
{
StringBuffer sb
=
new
StringBuffer
()
;
if
(
list
.
size
()
==
0
)
{
sb.
append
(
list
.
get
(
0
)
.begin +
"->"
+
list
.
get
(
0
)
.end)
;
}
else
{
sb.
append
(
list
.
get
(
0
)
.begin)
;
for
(
int i =
0
; i <
list
.
size
()
; i++
)
{
sb.
append
(
"->"
)
;
sb.
append
(
list
.
get
(i)
.end)
;
}
}
return sb;
}
privatevoid
dfs
(
Node
cur,
List<Node>
lists,
List<Node>
tmp,int
end,int
curCost,int
pos
)
{
if
(
cur
.end >
end
||
curCost
> min)
return;
else
if
(
cur
.end ==
end
)
{
if
(
curCost
< min)
{
min =
curCost
;
finalList =
new
ArrayList
<>
(
tmp
)
;
}
}
else
{
for
(
int i =
pos
+
1
; i <
lists
.
size
()
; i++
)
{
Node node =
lists
.
get
(i)
;
if
(node.begin ==
cur
.end)
{
tmp
.
add
(node)
;
dfs
(node,
lists
,
tmp
,
end
,
curCost
+ node.cost, i)
;
tmp
.remove(
tmp
.size()
-
1
)
;
}
else
if
(node.begin >
cur
.end)
{
break;
}
}
}
}
class
NodeComp
implements
Comparator<
Node
>
{
@Override
publicint
compare
(
Node
o1,
Node
o2
)
{
if
(
o1
.begin <
o2
.begin)
return-1;
else
if
(
o1
.begin >
o2
.begin)
return
1;
else
return
0;
}
}
class
Node
{
int begin;
int end;
int cost;
Node
(
int
begin,
int
end,
int
cost)
{
this.begin =
begin
;
this.end =
end
;
this.cost =
cost
;
}
@Override
public
String
toString()
{
return begin +
","
+ end;
}
}
}

0 点赞 评论 收藏
分享
创作者周榜
更多
关注他的用户也关注了: