At this stage just think about the 2D array as just the table of driving distances.
When you as a human want to look up the distance between the two cities you first have to find what two cities you have to find the distance from.
With those two cities just read the table and find the distance between the two cities. When you read the table you take one of the cities names and find the row then take the other cities name and find the corresponding column. Where the column and the row intersect you find the distance. Doing this programmatically is not much different.
Like when you looked into 1D arrays the number tells the computer what slot to look into i.e. int z = array[2].
However 2D arrays are like the table. you need both the row and the column to get what data is inside it.
For example if you want to find the distance between Dallas and Boston you would go int p = drivingDistancesArray[0,2]
As Dallas is the 0 row and Boston is in the 2 Column( Remember arrays in C# start at 0(there is a reason why but its complex)).
What your job is to do is to find a way to programmatically look up the table.