diff --git a/src/route/map.cpp b/src/route/map.cpp
index a3ca7d1..f5f928e 100644
--- a/src/route/map.cpp
+++ b/src/route/map.cpp
@@ -45,7 +45,7 @@
 }
 
 ndn::optional<ndn::Name>
-Map::getRouterNameByMappingNo(int32_t mn)
+Map::getRouterNameByMappingNo(int32_t mn) const
 {
   auto&& mappingNumberView = m_entries.get<detail::byMappingNumber>();
   auto iterator = mappingNumberView.find(mn);
diff --git a/src/route/map.hpp b/src/route/map.hpp
index 04cf0e4..01801be 100644
--- a/src/route/map.hpp
+++ b/src/route/map.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2017,  The University of Memphis,
+ * Copyright (c) 2014-2018,  The University of Memphis,
  *                           Regents of the University of California
  *
  * This file is part of NLSR (Named-data Link State Routing).
@@ -105,7 +105,7 @@
   }
 
   ndn::optional<ndn::Name>
-  getRouterNameByMappingNo(int32_t mn);
+  getRouterNameByMappingNo(int32_t mn) const;
 
   ndn::optional<int32_t>
   getMappingNoByRouterName(const ndn::Name& rName);
diff --git a/src/route/routing-table-calculator.cpp b/src/route/routing-table-calculator.cpp
index a35df65..0be5e54 100644
--- a/src/route/routing-table-calculator.cpp
+++ b/src/route/routing-table-calculator.cpp
@@ -29,6 +29,7 @@
 
 #include <iostream>
 #include <boost/math/constants/constants.hpp>
+#include <ndn-cxx/util/logger.hpp>
 #include <cmath>
 
 namespace nlsr {
@@ -56,7 +57,7 @@
 }
 
 void
-RoutingTableCalculator::makeAdjMatrix(Nlsr& pnlsr, Map pMap)
+RoutingTableCalculator::makeAdjMatrix(Nlsr& pnlsr, Map& pMap)
 {
   std::list<AdjLsa> adjLsdb = pnlsr.getLsdb().getAdjLsdb();
   // For each LSA represented in the map
@@ -116,14 +117,34 @@
 }
 
 void
-RoutingTableCalculator::writeAdjMatrixLog()
+RoutingTableCalculator::writeAdjMatrixLog(const Map& map) const
 {
+  if (!getNdnCxxLogger().isLevelEnabled(ndn::util::LogLevel::DEBUG)) {
+    return;
+  }
+
+  NLSR_LOG_DEBUG("-----------Legend (routerName -> index)------");
+  std::string routerIndex;
+  std::string indexToNameMapping;
+  std::string lengthOfDash = "--";
+
   for (size_t i = 0; i < m_nRouters; i++) {
-    std::string line="";
+      routerIndex += boost::lexical_cast<std::string>(i);
+      routerIndex += " ";
+      lengthOfDash += "--";
+      NLSR_LOG_DEBUG("Router:" + map.getRouterNameByMappingNo(i)->toUri() +
+                     "Index:" + boost::lexical_cast<std::string>(i));
+  }
+  NLSR_LOG_DEBUG(" |" + routerIndex);
+  NLSR_LOG_DEBUG(lengthOfDash);
+
+  for (size_t i = 0; i < m_nRouters; i++) {
+    std::string line;
     for (size_t j = 0; j < m_nRouters; j++) {
       line += boost::lexical_cast<std::string>(adjMatrix[i][j]);
       line += " ";
     }
+    line = boost::lexical_cast<std::string>(i) + "|" + line;
     NLSR_LOG_DEBUG(line);
   }
 }
@@ -210,7 +231,7 @@
   allocateAdjMatrix();
   initMatrix();
   makeAdjMatrix(pnlsr, pMap);
-  writeAdjMatrixLog();
+  writeAdjMatrixLog(pMap);
   ndn::optional<int32_t> sourceRouter =
     pMap.getMappingNoByRouterName(pnlsr.getConfParameter().getRouterPrefix());
   allocateParent(); // These two matrices are used in Dijkstra's algorithm.
@@ -232,7 +253,7 @@
     for (int i = 0 ; i < vNoLink; i++) {
       // Simulate that only the current neighbor is accessible
       adjustAdMatrix(*sourceRouter, links[i], linkCosts[i]);
-      writeAdjMatrixLog();
+      writeAdjMatrixLog(pMap);
       // Do Dijkstra's algorithm using the current neighbor as your start.
       doDijkstraPathCalculation(*sourceRouter);
       // Update the routing table with the calculations.
diff --git a/src/route/routing-table-calculator.hpp b/src/route/routing-table-calculator.hpp
index 7158fd6..6024fbd 100644
--- a/src/route/routing-table-calculator.hpp
+++ b/src/route/routing-table-calculator.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014-2017,  The University of Memphis,
+ * Copyright (c) 2014-2018,  The University of Memphis,
  *                           Regents of the University of California
  *
  * This file is part of NLSR (Named-data Link State Routing).
@@ -61,10 +61,10 @@
     \param pMap The map to populate with the adj. data.
   */
   void
-  makeAdjMatrix(Nlsr& pnlsr, Map pMap);
+  makeAdjMatrix(Nlsr& pnlsr, Map& pMap);
 
   void
-  writeAdjMatrixLog();
+  writeAdjMatrixLog(const Map& map) const;
 
   /*! \brief Returns how many links a router in the matrix has.
     \param sRouter The router to count the links of.
