gpt4 book ai didi

java - 如何使用 Graphviz 从点文件格式生成 PNG 图像

转载 作者:搜寻专家 更新时间:2023-11-01 01:16:57 25 4
gpt4 key购买 nike

我有一个实现优先级队列的 java 类。然后我有一个类测试生成这样的图:

digraph G {
Milan (0.0) -> Turin (1.2)
Milan (0.0) -> Montreal (7.0)
Turin (1.2) -> Paris (5.8)
Turin (1.2) -> Tokyo (2.2)
}

此图保存在名为“queue”的文件中。

现在我希望使用 Graphviz 将此图显示在 PNG 图像中。所以我的测试文件的最后一次调用(在你创建并优先填充队列之后)是:

queue.toString("queue");

好的。 toString 方法如下:

public void toString(String fileDot){
try {
FileOutputStream file = new FileOutputStream(fileDot);
PrintStream Output = new PrintStream(file);
Output.print(this.printQueue());
Output.close();
File f = new File(fileDot);
String arg1 = f.getAbsolutePath();
String arg2 = arg1 + ".png";
String[] c = {"dot", "-Tpng", arg1, "-o", arg2};
Process p = Runtime.getRuntime().exec(c);
int err = p.waitFor();
}
catch(IOException e1) {
System.out.println(e1);
}
catch(InterruptedException e2) {
System.out.println(e2);
}
}

private String printQueue() throws IOException {
String g = new String("");
char c = '"';
g = g.concat("digraph G {\n");
if(isEmpty())
g = g.concat(" " + "Empty priority queue.");
else {
for(int i = 0; i < lastIndex; i++) {
if(heap[2 * i] != null) {
g = g.concat("" + heap[i].elem + " (" + heap[i].prior + ") " + " " + " -> " + " " + "" + heap[i * 2].elem + " (" + heap[i * 2].prior + ") \n" );
if(heap[2 * i + 1] != null)
g = g.concat("" + heap[i].elem + " (" + heap[i].prior + ") " + " " + " -> " + " " + "" + heap[i * 2 + 1].elem + " (" + heap[i * 2 + 1].prior + ") \n" );
}
} //end for
} //end else
g = g.concat("}");
return g;
}

为什么生成的图片不是.png?我哪里错了?当然,我安装了 Graphviz。谢谢

最佳答案

当我在命令行通过 dot 运行上面的 .dot 文件时,我得到:

$ dot -Tpng queue.dot -oqueue.png
Warning: queue.dot:2: syntax error in line 2 near '('

因此,节点名称中括号内的数字在 dot 语法中无效。如果删除它们,我希望 .png 文件能够成功创建。如果您需要在输出中使用带括号的数字,我建议您在 GraphViz 文档中查找节点标签。

我还注意到 toString() 对于创建 .png 文件的函数来说似乎不是一个特别清晰的名称,因此更改函数的名称可能是可取的。

关于java - 如何使用 Graphviz 从点文件格式生成 PNG 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23301276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com