g r a p h v i z graphviz graphviz(Graph Visualization Software)是一个由 A T & T AT\&T AT&T实验室启动的开源工具包,用于绘制 D O T DOT DOT语言脚本描述的图形。
实现可视化效果(官网摘取):
下载安装
官网:http://www.graphviz.org/
对应各个系统版本下载,win
用户安装过程中选择自动加入path
即可,其他系统用户详见官网下载页说明。
使用
vscode
对应插件Graphviz Preview
。
主要方法
主要分为八个转换方法, g r a p h v i z graphviz graphviz主要功能就是把脚本转化为svg
图或者其他模式的图片,其中使用较多的转换方法是dot
和neato
:
dot
:有向图neato
:无向图
作用方式为:dot/neato/... [option] file
保存为pdf文件,类比svg
:
dot -Tpdf -o test.pdf ./test.dot
更详细的参数说明见http://www.graphviz.org/pdf/dot.1.pdf
。
应用
为搜索二叉树基类添加DOT
格式文档的输出方法:
template <typename T>
void Tree<T>::TreeOut(TreeNode<T> *x, string name)
{// 声明文件名称stringstream sstr;name = name + ".dot";int num = name.size() + 1;char *filename = new char[num];sstr << name;sstr >> filename;freopen(filename, "w", stdout);cout << "digraph Tree{" << endl;queue<TreeNode<T> *> q;q.push(x);while (q.size()){TreeNode<T> *tmp = q.front();q.pop();if (tmp->_left){cout << tmp->_key << "->" << tmp->_left->_key << endl;q.push(tmp->_left);}if (tmp->_right){cout << tmp->_key << "->" << tmp->_right->_key << endl;q.push(tmp->_right);}}
最终得出结果为:
可以看得出效果相对较差,因为间距问题和无法区分左右子树,所以后续需要继续改进,网上挖到一份陈年脚本,用上效果很好,挂个链接:https://gist.github.com/nanpuyue/b5950f20937f01aa43227d269aa83918