- C 99.1%
- Makefile 0.9%
| .gitignore | ||
| cli.c | ||
| cli.h | ||
| dummy_test.txt | ||
| dummy_test_key.txt | ||
| graph.h | ||
| main.c | ||
| Makefile | ||
| priority.c | ||
| priority.h | ||
| README.md | ||
| search.c | ||
| search.h | ||
| stats.c | ||
| stats.h | ||
| test.txt | ||
| tools.c | ||
| tools.h | ||
第二周大作业
介绍
我们本次作业的目的是用 C语言 完成一个包含图分析与算法的代码库,包括
- 图元素的基础分析
- 顶点与边基础统计
- 图度量
- 边度量等
- 最短路径蒜法等功能。
再将此代码库制作成一个 CLI 工具,可以直接在 Linux 的 Terminal 里面运行。
具体要求
-
C 语言实现,只允许调用
stdlib.h和stdio.h(0.5%)- 其余函数如有需要,请自行实现,不做限制
- 可使用网上的资源,但请在文件注释中注明来源
-
编辑
stats.h和stats.c文件,完成如下函数(2%):int numberOfEdges(char name[])接受以文件名为图标识符的char数组,返回图中边的数量int numberOfVertices(char name[])接受以文件名为图标识符的char数组,返回图中顶点的数量int freemanNetworkCentrality(char name[])接受以文件名为图标识符的char数组,返回图中 Freeman's Network Centrality 值int closenessCentrality(char name[])接受以文件名为图标识符的char数组,返回图中 Closeness Centrality 值- 参考 https://www.cl.cam.ac.uk/teaching/1213/L109/stna-lecture3.pdf
- 评分标准为
- 前两个函数 + 后面两个函数中选一个
- 3/3 = 100% * 2% = 2%,4/3 = 125% * 2% = 2.5%
-
将
DFS、BFS、Dijkstra三个算法封装在search.h和search.c文件中(3%,0.75% + 0.75% + 1.5%)- 每个函数封装结构没有要求,输入输出也没有要求
- 需要额外加入一个函数
int* shortestPath(int u, int v, char algorithm[])用来评分- 输入两个
int值,u和v,分别为起点与终点的顶点编号 - 输入一个
char数组,装有所选算法的名字(分别为:{DFS, BFS, Dijkstra}, 请严格遵守) - 输出一个
int数组指针,装有从u到v的最短路径
- 输入两个
- 我们将对这三个算法进行检查评分,并提供简单的数据及其 autograder 让你们本地自检
-
编辑
main.c文件,实现以下功能(1%):- 输出二进制文件名为
search-cli - 利用 main 函数中的 argv 和 argc 参数接受命令行中的参数,完成以下命令行功能:
./search-cli -h/--help(-h或--help,以下同) 显示帮助菜单,格式没有要求,不作为评分要求,只求自己能够看懂./search-cli -g/--graph FILE_PATH -s/--stats STATS_PARAMS显示以FILE_PATH为输入文件的图的统计信息,输出没有格式要求,具体支持的STATS_PARAMS参数如下:edgesverticesfreemanbetweennessclosenesseigenvector
./search-cli -g/--graph FILE_PATH -sp/--shortestpath SEARCH_PARAMS -u STARTING_POINT -v TARGET_POINT显示以FILE_PATH为输入文件的图中 从开始点 u 到 终点 v 的用SEARCH_PARAMS蒜出来的最短路径- 样例输入:
./search-cli -g ./sx-stackoverflow.txt -sp Dijkstra -u 1 -v 5 - 样例输出:
1 -> 2 -> 3 -> 4 ->5
- 样例输入:
- 输出二进制文件名为
-
自测文件为
test.txt,检测所写算法能否在小的数据集上运行正确,具体文件格式如下:- 第一行:
n m代表n个顶点,m条边 - 接下来每行:
u v w代表从u到v的权重为w的边 - 正确答案保存在
test_key.txt注:只有唯一最优解
- 第一行:
-
Makefile- 目标二进制文件为:
search-cli - 不规定具体编译路径
- 样例
Makefile只是一个骨架,不能直接运行不能直接运行不能直接运行!!!
- 目标二进制文件为:
-
真正的测试集来源于斯坦福开放的图数据集(1%)(https://snap.stanford.edu/data/amazon0601.txt.gz)
- 具体信息参见 https://snap.stanford.edu/data/amazon0601.html
- 将会提供修改版数据集(简化),测试也将在修改版上进行
-
加分项
已完成:
______________________________________
< 想不到吧,蒜头君是一头牛 >
--------------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
-
2% 更大的数据集,来自于 https://snap.stanford.edu/data/sx-stackoverflow.html
- ~260万个顶点 ~6400万条边
- 需要更好的优化(内存,时间复杂度)
-
0.1%
Makefile中加入make clean -
待更新
-
目录结构 - 可增加新文件,此目录下所有文件是批改所需,请不要改动文件名 GraphProject/main.c search.c search.h stats.c stats.h dummy_test.txt dummy_test_key.txt Makefile submission.url
-
交作业方式 - 与 Debug 作业相同 - 原则上不更换小组 - 每小组开一个新的
repo,名字叫做GraphProject- 将小组的repo url填入助教提供的表格中,并将助教的GitHub account添加为collaborator
