В python у меня есть следующее:
graph = {}
graph[1] = {}
graph[2] = {}
graph[3] = {}
graph[1][3] = graph[3]
graph[2][1] = graph[1]
graph[2][3] = graph[3]
graph[3][2] = graph[2]
это структура для представления графа, и я считаю ее хорошей, потому что ее структура такая же, как у одного из его узлов, поэтому я могу использовать ее напрямую, чтобы инициировать поиск (как в разделе «Сначала в глубину»). Его печатная версия:
{1: {3: {2: {1: {...}, 3: {...}}}}, 2: {1: {3: {2: {...}}}, 3: {2: {...}}}, 3: {
2: {1: {3: {...}}, 3: {...}}}}
И ее можно использовать как:
graph[1][3][2][3][2][1][3][2][1][3][2].keys()
Теперь мне любопытно узнать, как бы можно было реализовать ее на C ++, C # и Java, не прибегая к уловкам "Object", которые заполнили бы код с уродливыми приведениями. Что касается C ++, я думал о программировании мета-шаблонов, но это могло бы генерировать "конечные типы данных", когда требуется что-то вроде
map<int,map<int,...>> or map<int,...>