private void createNetwork(ArrayList<Road> roads, ArrayList<RoadLink> roadLinks){
		// initialization
		int totalRoads = roads.size();
		network = new int[totalRoads*2][totalRoads*2][NUMBER_OF_ARC_ATTRIBUTES];
		// set up road to node relation - needed for adding road links
		HashMap<Integer, Integer> roadIdToNode = new HashMap<Integer, Integer>();
		// Add the roads themselves to network
		int index = 0;
		for (Road road : roads) {
			roadIdToNode.put(road.getId(), index);
			// Add road to network as long as not closed
			if(road.getStatus() != RoadStatus.Closed){
				network[index][index+totalRoads] = new int[]{1,road.getLength(), road.getRiskLevel()};
				if(LabelRerouter.ASSUME_SYMMETRIC){
					network[index+totalRoads][index] = new int[]{1,road.getLength(), road.getRiskLevel()};
				}
			}
			index++;
		}
		// Add links between roads
		for (RoadLink roadLink : roadLinks) {
			Road fromRoad = roadLink.getFromRoad();
			Road toRoad = roadLink.getToRoad();
			int startNodeIndex = roadLink.getFrom() == RoadPart.Start ? roadIdToNode.get(fromRoad.getId()) 
					: roadIdToNode.get(fromRoad.getId()) + totalRoads;
			int endNodeIndex = roadLink.getTo() == RoadPart.Start ? roadIdToNode.get(toRoad.getId()) 
					: roadIdToNode.get(toRoad.getId()) + totalRoads;
			network[startNodeIndex][endNodeIndex] = new int[]{1,roadLink.getDistance(), 0};
			if(LabelRerouter.ASSUME_SYMMETRIC){
				network[endNodeIndex][startNodeIndex] = new int[]{1,roadLink.getDistance(), 0};
			}
		}
	}