新聞中心
使用c++語言,用了兩天實(shí)現(xiàn)所有功能,等寫完報(bào)告后,整理一下遇到的問題和解決辦法。
一共620行代碼
任務(wù)書要求使用中文作為key,建立散列表,但是使用c++很難把中文轉(zhuǎn)unicode編碼,我找到的代碼會導(dǎo)致控制臺不輸出中文,直接偷懶用stl庫unordered_map。把名字作為key,返回在數(shù)組中的下標(biāo)。不過我也模擬了散列表,用的拉鏈法,數(shù)組模擬鏈表,只不過沒用上。
clion運(yùn)行正常,但是調(diào)試的時(shí)候控制臺中文亂碼。
按Ctrl+Alt+Shift+/ 點(diǎn)第一個(gè) 點(diǎn)第一個(gè)的鉤,完美解決。?
學(xué)校給的txt是utf8格式,要改成ANSI編碼讀取,否則會出錯(cuò),我用的fscanf,fgets方法讀入。然后我把數(shù)據(jù)中名字中間的空格去掉了(惱)這個(gè)真的是水平有限了,被惡心到。
在結(jié)構(gòu)體里加了一個(gè)state默認(rèn)為1,刪除為0,就不動txt了,在完成功能的時(shí)候判斷一下state就行,不過我還是寫了保存方法的,雖然沒用。
使用strtok_s ()分割字符串,真的難用,并且是c++11以后支持,我clion沒事,但是在dev中沒法用,dev加了c++11也不能運(yùn)行,換成了strtok_r,貌似一個(gè)是Linux的方法,一個(gè)是windows的方法?
在dev上運(yùn)行可能會出錯(cuò),大概是內(nèi)存的問題,換個(gè)編譯器把。
distance.txt有28w多行數(shù)據(jù),還行,就是刪空格刪了好久。shop.txt是真難讀,food不確定數(shù)量,comment也不確定數(shù)量,并且有的還沒有comment,我就fgets一行行讀,然后分割字符串,寫了100多行,惡心壞了。
distance里和shop里的餐館貌似不太能匹配的上?
多了一個(gè)鄭州輕工業(yè)大學(xué),還多了一個(gè)地方不知道是哪里,我又重新建了一個(gè)散列表。把輕大放在0,然后用Dijkstra求最短路,dist初始化為大值,g[a][b]是鄰接矩陣存距離,先初始化為大,然后再讀距離。套Dijkstra模板就能算出來最短路。輸入商家名字即可返回信息和最短距離,第一次運(yùn)行需要2s不到,之后就秒出結(jié)果。
memset 0x3f給int賦大值, 0x7f給double賦大值。
然后g,dist都要放在全局變量里,否則memset賦出來的大值不一樣,目前還不懂,再學(xué)學(xué)才能明白吧。(留坑)
從clion復(fù)制出來的代碼到dev里會亂碼,原因也是編碼的問題,復(fù)制到文本框里,utf8轉(zhuǎn)ANSI就解決了。
讓我想想怎么優(yōu)化代碼
餐館推薦里分?jǐn)?shù)都是double類型,我排序的時(shí)候排成int了,修改了。這里是把分?jǐn)?shù)作為第一個(gè)值,把對應(yīng)的下標(biāo)作為第二個(gè)值,然后sort。
把加載數(shù)據(jù)和運(yùn)算的部分都改為算一次,提高效率。
把距離的結(jié)構(gòu)體刪了,重新寫了求最短路的算法。
餐館推薦功能發(fā)現(xiàn)了個(gè)錯(cuò)誤,結(jié)構(gòu)體里type讀入時(shí)帶\n,用戶讀入的不帶,現(xiàn)在加上了。
評論的關(guān)鍵字不可以輸數(shù)字,要不然會出來好多,只能輸入中文。原因看上面的圖
演示視頻:輕大數(shù)據(jù)結(jié)構(gòu)與算法實(shí)訓(xùn)在線餐館預(yù)訂管理系統(tǒng)_嗶哩嗶哩_bilibili
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)頁題目:輕大數(shù)據(jù)結(jié)構(gòu)與算法實(shí)訓(xùn)在線餐館預(yù)訂管理系統(tǒng)-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://www.dlmjj.cn/article/dcdigi.html