天天看點

華為2019年軟體精英挑戰賽

官網以及任務規則

https://codecraft.huawei.com/

代碼連結

https://github.com/yyhhlancelot/HuaWei2019_CodeCraft

主要資料結構及程式邏輯

graph.h中建構了Graph類以及它的派生類Graphmtx類,用于建構鄰接矩陣,為了使用最短路徑算法。

method.h中建構了Car類、Cross類以及Road類。關鍵資料結構為Road類中建構的Car對象指針矩陣,通過對指針矩陣的改變達到行駛車輛的目的,同時矩陣中的每個元素代表了每一台車,将車移動時将原位置的指針置零,同時在新位置上賦予對象位址。 在Cross類中設立了Road指針指向該每個cross的各條road。Car類中設定了car的各種狀态作為成員變量。 method.cpp中對各個類的成員函數進行實作。

process_2.h包含了process_2.cpp的各個函數的聲明,process_2.cpp中實作了判别器規則(交通系統,任務書中指定的各項交通規則)。 CodeCraft-2019.cpp包含了整個流程的腳本。首先通過dijkstra算法找到最短路,再将規劃的路徑放入判别器中進行判别看是否未發生死鎖(dead lock)。

read_write.h包含了對txt檔案以及官方資料格式進行讀寫的函數。

不足之處

該程式未根據官方邏輯進行書寫,官方邏輯為在判别器中發現死鎖後改變路徑。因為調試判别器花了不少時間,後面再寫死鎖機制感覺時間不夠了, 而那個時候還沒有上分,于是就放棄了去繼續碼判别器。同時程式中又很多可以優化的地方,包括循環的判斷等,将這些地方進行優化能大大提高代碼效率,但是還是心急上分,是以并沒有再繼續花時間在這上面。

總結

最終成績不夠理想,未能進入複賽。不過好處是獲得了不少的項目經驗,畢竟從10号開始正式寫代碼到30号結束,嘗試了兩套方案,差不多碼了五六千行左右的代碼,平時科研生活的強度和效率也趕不上這麼高。

繼續閱讀