如何构建一个 C++ 程序来获取图形、为其着色并将该图形打印到 .dot 文件?

How to build a C++ program that takes a graph, color it and print out that graph to a .dot file?

问题陈述:给定一个无向图 E. 构建一个 C++ 程序,使用贪心算法对其着色。你将从文件“graph.txt”中读取输入,第一行包含节点总数n和边总数m,每(m+1)行包含两个正整数代表一条边。结果应该打印到文件“coloredgraph.dot”,它代表 DOT 语言的彩色图形。 (节点索引从1到n)
例如:
输入:

5 5
1 2 
2 3 
3 4
4 1
1 5

输出:

graph E
{
5 [fillcolor=red, style=filled];
4 [fillcolor=red, style=filled];
1 [fillcolor=green, style=filled];
3 [fillcolor=green, style=filled];
2 [fillcolor=red, style=filled];
1 -- 2;
2 -- 3;
3 -- 4;
4 -- 1;
1 -- 5;
}

我编写了一个C++程序来为图形着色,然后将结果存储在数组color[]中(其中color[i-1]是节点i的颜色)。例如,从上面的输入,我得到结果 color[] = {0, 1, 0, 1, 1} (我用数字 0 -> n-1 来表示颜色。这些数字可以代表DOT/Graphviz中可用的任何颜色,不同的数字表示不同的颜色。在这种情况下,0 可能表示 black/white/etc,1 可能表示 green/blue/etc,但 1 和 0 必须代表两种不同的颜色)。但我目前对如何将我发现的结果转换为具有上述格式的 .dot 文件感到困惑。我只是 C++ 的初学者,之前没有使用 DOT 或 Graphviz 的经验。任何人都可以使用我找到的结果帮助我根据需要打印输出吗?非常感谢您的任何建议。
贪心算法的实现可以在这里找到:https://www.geeksforgeeks.org/graph-coloring-set-2-greedy-algorithm/
P/s : 抱歉我的英语不好

您可以打印文件:

std::cout << "graph E\n{\n";
for (std::size_t i = 0; i < nodes; ++i) {
    std::cout << (i+1) << "[fillcolor=" << color[i] << ", style=filled];\n";
}
for (std::size_t i = 0; i < edges.size(); ++i) {
    std::cout << edges[i][0] << " -- " << edges[i][1] << ";\n";
}
std::cout << "}\n";