Матрица смежности - это стандартный способ представления графа. В вашем случае каждый элемент матрицы может быть дополнен категорией узла (город и т. Д.).
Адрес пользователя можно получить, сохранив отдельную ссылку на самый внутренний узел данного адреса и проследив его до уровня города, чтобы построить адрес.
Лично я, вероятно, выбрал бы более структурированный подход, чем общий граф, создавая бизнес-объекты, такие как Город, Улица и т. Д., И, следовательно, применяя структуру адреса; например,
public interface Residence {
int getNumber();
Street getStreet();
}
public interface Street {
City getCity();
}
public interface City {
Country getAddress();
}
Чтобы отобразить адрес данного места жительства, я просто иду по графу объектов; например,
Residence r = ...
System.err.println(String.format("%d %s %s %s", r.getNumber(), r.getStreet(), r.getStreet().getCity(), r.getStreet().getCity().getCountry()));