郑州轻工业大学zzuli数据结构与算法实训在线餐馆预订管理系统

使用c++语言,用了两天实现所有功能,等写完报告后,整理一下遇到的问题和解决办法。

一共620行代码

2e3f98a0831240d485c318b06d7bc41a.jpeg

任务书要求使用中文作为key,建立散列表,但是使用c++很难把中文转unicode编码,我找到的代码会导致控制台不输出中文,直接偷懒用stl库unordered_map。把名字作为key,返回在数组中的下标。不过我也模拟了散列表,用的拉链法,数组模拟链表,只不过没用上。

clion运行正常,但是调试的时候控制台中文乱码。

按Ctrl+Alt+Shift+/ 点第一个 点第一个的钩,完美解决。 

3ab8e8fb5a084f80ac75c0dd1bf0da26.png

 学校给的txt是utf8格式,要改成ANSI编码读取,否则会出错,我用的fscanf,fgets方法读入。然后我把数据中名字中间的空格去掉了(恼)这个真的是水平有限了,被恶心到。

在结构体里加了一个state默认为1,删除为0,就不动txt了,在完成功能的时候判断一下state就行,不过我还是写了保存方法的,虽然没用。

使用strtok_s ()分割字符串,真的难用,并且是c++11以后支持,我clion没事,但是在dev中没法用,dev加了c++11也不能运行,换成了strtok_r,貌似一个是Linux的方法,一个是windows的方法?

在dev上运行可能会出错,大概是内存的问题,换个编译器把。

distance.txt有28w多行数据,还行,就是删空格删了好久。shop.txt是真难读,food不确定数量,comment也不确定数量,并且有的还没有comment,我就fgets一行行读,然后分割字符串,写了100多行,恶心坏了。

distance里和shop里的餐馆貌似不太能匹配的上?

多了一个郑州轻工业大学,还多了一个地方不知道是哪里,我又重新建了一个散列表。把轻大放在0,然后用Dijkstra求最短路,dist初始化为最大值,g[a][b]是邻接矩阵存距离,先初始化为最大,然后再读距离。套Dijkstra模板就能算出来最短路。输入商家名字即可返回信息和最短距离,第一次运行需要2s不到,之后就秒出结果。

memset 0x3f给int赋最大值, 0x7f给double赋最大值。

然后g,dist都要放在全局变量里,否则memset赋出来的最大值不一样,目前还不懂,再学学才能明白吧。(留坑)

从clion复制出来的代码到dev里会乱码,原因也是编码的问题,复制到文本框里,utf8转ANSI就解决了。

让我想想怎么优化代码

餐馆推荐里分数都是double类型,我排序的时候排成int了,修改了。这里是把分数作为第一个值,把对应的下标作为第二个值,然后sort。

把加载数据和运算的部分都改为算一次,提高效率。

把距离的结构体删了,重新写了求最短路的算法。

餐馆推荐功能发现了个错误,结构体里type读入时带\n,用户读入的不带,现在加上了。

评论的关键字不可以输数字,要不然会出来好多,只能输入中文。原因看上面的图

演示视频:大数据结构与算法实训在线餐馆预订管理系统_哔哩哔哩_bilibili

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐