有个算法题目没明白啥意思,帮忙分析下
int[][] deges = {{0,0,3,2},{1,2,0,1}};
int nodeCount = 4;
//Map<Integer,List<Integer>>为一个node
ArrayList<Map<Integer,List<Integer>>> order = new ArrayList<Map<Integer,List<Integer>>>();
//做为循环结束的判断标志
Map<Integer,Integer> nodes = new HashMap<Integer, Integer>();
for(int i = 0; i < nodeCount; i ++) {
nodes.put(0, deges[0][i]);
}
while(nodes.size() > 0) {
for(int i = 0; i < nodeCount; i ++) {
int pre = deges[0][i];
int suf = deges[1][i];
for(Map<Integer,List<Integer>> node : order) {
//node的前驱 等于 后继,建立newNode插入node之前,并从nodes中删除此点
if(node.containsKey(suf)) {
Map<Integer,List<Integer>> newNode = new HashMap<Integer,List<Integer>>();
List<Integer> newSuf = new ArrayList<Integer>();
newSuf.add(suf);
newNode.put(pre, newSuf);
int index = order.indexOf(node);
order.add(index, newNode);
}
//node的后继 等于 前驱,建立newNode插入node之后,并从nodes中删除此点
//node的前驱 等于 前驱,将suf加入node的后继列表中,并从nodes中删除此点
}
}
}
大概是这么个逻辑吧,没细写
二维数组就标志了线段连接的前一个节点和后一个节点,目的就是为了把一个混乱的数组有序化。
题目的意思就,用节点和边表示流程图,节点就是节点,边是方向,比如从3节点到0节点3->0就是[3,0]
节点数量应该是输出结果的节点数量,按示例来说有两个流程,一个3021一个301
4个节点是3021,3个节点是301
所以意思就是,用所给的边的方向,输出要求的节点数的结果