每個輸入包含乙個測試用例。
輸入的第一行包括四個正整數,表示位置個數n(2<=n<=10000),道路條數m(1<=m<=100000),起點位置編號s(1<=s<=n)和快遞位置編號t(1<=t<=n)。位置編
號從1到n,道路是單向的。資料保證s≠t,保證至少存在乙個方案可以從起點位置出發到達快遞位置再返回起點位置。
接下來m行,每行包含三個正整數,表示當前道路的起始位置的編號u(1<=u<=n),當前道路通往的位置的編號v(1<=v<=n)和當前道路的距離d(1<=d<=1000)。
floyd實現的**片
.
int floyd()
for (c_k = 1 ; c_k <= n ; c_k ++)
for (c_i = 1 ; c_i <= n ; c_i ++)
for (c_j = 1 ; c_j <= n ; c_j ++)
if (value[c_i][c_k] != int_max && value[c_k][c_j] != int_max && value[c_i][c_k] + value[c_k][c_j] < value[c_i][c_j] )
value[c_i][c_j] = value[c_i][c_k] + value[c_k][c_j] ;
cout << value[s][t] + value[t][s] << endl ;
}return 0 ;
}
dijkstra實現的**片
.
int dijkstra(int start , int end , int **arc , int len)
}sta[local] = false ;
//更新dis
/*dis[local] != int_max ;
arc[local][c_j] != int_max ;
int_max + int_max 超過 int 表示的範圍
*/for (c_j = 1 ; c_j <= len ; c_j ++)
}//while
return dis[end] ;
}int testdijkstra()
for (c_i = 1 ; c_i <= n ; c_i ++)
for (c_j = 1 ; c_j <= n ; c_j ++)
value[c_i][c_j] = c_i == c_j ? 0 : int_max ;
c_k = 0 ;
while (c_k ++ < m)
for (c_i = 1 ; c_i <= n ; c_i ++)
cout << dijkstra(s , t , value , n) + dijkstra(t , s , value , n) << endl ;
}}
正確答案
解題思路:
首先是對道路資訊儲存,然後按照起始路徑u的值,按照從小到大的順序排列;剩下就是按照dijkstra的方式處理s到t的最短路徑;newdijkstrachange中的map是為了快速查詢到路徑起始點對應的位址,縮減查詢起始點的時間。
#include#include#include#include#includeusing namespace std ;
struct thridata
bool operator < (const thridata& cmp)const
};int newdijkstrachange(int start , int end , vector& arc , int len)
c_i = tmplen - 1 ;
while (c_i > -1)
c_i = 1;
while (c_i ++ < len)
}if (dis[local] == int_max)
break ;
sta[local] = false ;
//更新dis
for (c_j = connectlocal[local] ; c_j < tmplen ; c_j ++)
}//while
return dis[end] ;
}int main()
) ; }
sort(value.begin() , value.end()) ;
int ret = 0 ;
ret += newdijkstrachange(s , t , value , n) ;
ret += newdijkstrachange(t , s , value , n) ;
cout << ret << endl ;
for (c_i = 0 ; c_i < value.size() ; c_i ++)
cout << value[c_i].first << '\t' << value[c_i].second << '\t' << value[c_i].three << endl;
value.clear() ;
}return 0 ;
}
解題思路:
開始使用map<>儲存資料;map<>查詢資料的速度為:o(1);鍵值是可以儲存相同u的所有的v-d的資料;在newdijkstrachange,中尋找u對應的資訊;速度可以減少;可以減少上面的用到的map找u和位址的對應關係的步奏;減少**長度;達到簡潔的效果;
struct doubledata
};int newdijkstrachange(int start , int end , map>& arc , int len)
}if (dis[local] == int_max)
break ;
sta[local] = false ;
//更新dis
for (c_j = 0 ; c_j < arc[local].size() ; c_j ++)
}//while
return dis[end] ;
}int main_dijk()
c_k = 0 ;
while (c_k ++ < m)
) ;}
int ret = 0 ;
ret += newdijkstrachange(s , t , value , n) ;
ret += newdijkstrachange(t , s , value , n) ;
cout << ret << endl ;
value.clear() ;
}return 0 ;
}
還在為取快遞而煩惱嗎 智宇物聯助力自動快遞櫃
電子商務的快速發展促進了我國快遞業的公升級與轉型。面對日益增長的對電子商務快遞的需求,許多快遞公司加入了物聯網的布局,希望通過物聯網技術 智慧型機械人和大資料量來提高運輸效率。智慧型快遞櫃就是其中之一。隨著快遞行業的 式增長,物聯網技術和物聯網技術的飛速發展,智慧卡物流裝置應運而生。智慧型快速箱作為...
女子雙11取快遞上熱搜 整個快遞櫃都被她承包了
近日,一段杭州女子雙十一取快遞驚呆保安 的 上了熱搜。中,女子取快遞後,快遞櫃從上至下 從左至右一列程式設計客棧列開啟,如同多公尺諾骨牌,節奏感十足,抖音點讚量超70萬。看後調侃 好傢伙,把快遞櫃搬回家吧 也有質疑 的真假 敢不敢把開快遞 乙個個都發出來,讓我們看看到底是不是買了這麼多 據了解,這段...
男生藏快遞箱求婚 不料被取快遞的小姐姐錯拆
近日,一男生將自己打包成快遞求婚,卻意外被其他女生開啟的烏龍 火了。29日,杭州一男生藏身乙個巨大的快遞箱中,想向女友求婚送驚喜,不料被女友同事取快遞時錯拆,驚喜差點給錯了人。幸好當事人及時出現解圍。這戲劇性的一幕被前台監控記錄下來。錯拆快遞的不明群眾王小姐說,自己當時一臉懵,還以為是快遞成精了,就...