思路:深度优先遍历
将所有路径及路径值放入数组,比较路径值选择最小的
var line1=readline().split(" ");
var l=line1[0],r=line1[1];
var arr=[];
while(line2=readline().split(" ")){
arr.push(line2);
}
var len=0;
var m=[l];
var res=[];
function minLen(arr,m,len){
for(var i=0;i<arr.length;i++){
if(arr[i][0]==m[m.length-1]){
minLen(arr,m.concat(arr[i][1]),len+arr[i][2]);
}
}
//将路径放入数组
if(m[m.length-1]==r){
m.push(len);
res.push(m);
}
}
minLen(arr,m,len);
//选取路径升级大小最小的
var newArr=res.shift();
var min=newArr.pop();
while(res.length){
m=res.pop();
n=m.pop();
if(n<min){
min=n;
newArr=m;
}
}
print(newArr.join("->")+"("+min+")");
我室友的方法:
思路:贪心算法,每次选择当前起点的所有路径里面,单位路径价值最高者作为下一步要走的路径
vector<int>roate;
int sum=0, temp=0, val=0;
while(s_e[0]!=s_e[1]){
temp=0, val=0;
roate.push_back(s_e[0]);
for(auto i=0; i<map.bucket_count(); i++){
if(map.cbegin(i)->first!=s_e[0]){
continue;
}
//查找哈希表中每个篮子里面起点相同的路径中,平均路径最赚的作为最终结果
for(auto local_it=map.cbegin(i); local_it!=map.cend(i); ++local_it){
if(val<local_it->second.price){
val=local_it->second.price;
sum+=local_it->second.val;
s_e[0]=local_it->second.end;
}
}
roate.push_back(s_e[0]);
}
}
for(int i=0; i<roate.size()-1; i++){
cout<<roate[i]<<"->";
}
cout<<roate.back()<<"("<<sum<<")"<<endl;
}
int main(){
vector<int>s_e={1000,1050};
vector<node>vec;
node no;
int n=6;
while(n-- && cin>>no.start>>no.end>>no.val){
vec.push_back(no);
}
helper(s_e, vec);
return 0;
}