Скачайте проект FluentApi.Graph.
Есть широко известный набор утилит для визуализации графов — GraphViz. Эти утилиты манипулируют описанием графов в текстовом формате *.dot (он же в прошлом *.gv). Спецификация формата.
Пример графа в этом формате:
1 2 3 4 5 6 7 8 |
digraph CommentParser { START [color=green; shape=ellipse]; comment [shape=box]; START -> slash [label="'/'"]; slash -> comment [label="'/'"]; comment -> comment [label="other chars"]; comment -> START [label="'\\n'"] } |
Кстати, если вам когда-то в будущем понадобится визуализация графов, то экономнее не программировать это самостоятельно, а воспользоваться одним из готовых инструментов: Например, GraphViz даёт удобную работу из командной строки, а Gephi — удобный графический интерфейс.
Ну а в этой задаче предстоит создать fluent API для задания графов в dot-формате. Чтобы можно было сконцентрироваться исключительно на fluent API, в проекте уже реализованы вспомогательные классы (Graph, DotFormatWriter и другие). Не надо повторять код уже написанный в этих классах.
Примеры использования требуемого API ищите в тесте DotGraphBuilder_Tests.
Детали
В формате dot у вершин и ребер можно указывать значения атрибутов. Вот полный список поддерживаемых атрибутов. Из этого многообразия реализуйте поддержку только следующих:
- Для вершин: color, fontsize, label и shape;
- Для ребер: color, fontsize, label и weight.
Поскольку одна из целей fluent API — это служить документацией, то в API нигде не должно быть возможности обратиться к члену, непредусмотренному в данном контексте. Например, у вершины не должно быть возможности указать weight, а у ребра — shape. Это проверяется в секретном тесте проверяющей системы.
И как обычно, не допускайте дублирования кода в своём решении!
Все ссылки ещё раз:
1 2 3 4 5 6 7 |
using System; using System.Globalization; using System.Linq; using System.Text; namespace FluentApi.Graph { |
Стоимость решения этой задачи всего 100 рублей, закажи решения у меня 🙂