重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
使用c++语言,用了两天实现所有功能,等写完报告后,整理一下遇到的问题和解决办法。
创新互联长期为成百上千客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为下城企业提供专业的网站建设、成都网站建设,下城网站改版等技术服务。拥有十年丰富建站经验和众多成功案例,为您定制开发。一共620行代码
任务书要求使用中文作为key,建立散列表,但是使用c++很难把中文转unicode编码,我找到的代码会导致控制台不输出中文,直接偷懒用stl库unordered_map。把名字作为key,返回在数组中的下标。不过我也模拟了散列表,用的拉链法,数组模拟链表,只不过没用上。
clion运行正常,但是调试的时候控制台中文乱码。
按Ctrl+Alt+Shift+/ 点第一个 点第一个的钩,完美解决。
学校给的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
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧