码迷,mamicode.com
首页 > 其他好文 > 详细

order pick-up and delivery problem

时间:2019-11-18 09:26:58      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:print   add   array   new   ++   start   问题   parse   star   

问题一:

pi表示取第i个单,di表示送第i个单。di不能在pi的前面。给一个取单送单的顺序,问是否是valid顺序。

 1 public boolean isValidOrderList(List<String> list) {
 2         Set<String> set = new HashSet<>();
 3         for (String item : list) {
 4             if (item.startsWith("P")) {
 5                 set.add(item);
 6             } else {
 7                 String parent = getParent(item);
 8                 if (!set.contains(parent)) {
 9                     return false;
10                 }
11                 set.remove(parent);
12             }
13         }
14         return set.isEmpty();
15     }
16     
17     
18     private String getParent(String dId) {
19         if (dId == null || dId.length() < 2 || dId.charAt(0) != D) {
20             throw new IllegalArgumentException("invalid input:" + dId);
21         }
22         
23         int id = Integer.parseInt(dId.substring(1));
24         return "P" + id;
25     }

问题二:

pi表示取第i个单,di表示送第i个单。di不能在pi的前面。给一个n,显示所有正确的顺序。

 1 public List<List<String>> print(int n) {
 2         List<List<String>> result = new ArrayList<>();
 3         List<List<String>> tempList = new ArrayList<>();
 4         for (int j = 1; j <= n; j++) {
 5             if (j == 1) {
 6                 result.add(Arrays.asList("p1", "d1"));
 7                 continue;
 8             }
 9             for (int i = 0; i < result.size(); i++) {
10                 String[] temp = new String[j * 2];
11                 for (int p =  0; p < 2 * j; p++) {
12                     for (int q = p + 1; q < 2 * j; q++) {
13                         clearArray(temp);
14                         temp[p] = "p" + j;
15                         temp[q] = "d" + j;
16                         fillInArray(result.get(i), temp);
17                         tempList.add(arrayToList(temp));
18                     }
19                 }
20             }
21             result = new ArrayList<>(tempList);
22             tempList.clear();
23         }
24         
25         return result;
26     }
27     
28     private void clearArray(String[] arr) {
29         for (int i = 0; i < arr.length; i++) {
30             arr[i] = null;
31         }
32     }
33     
34     private void fillInArray(List<String> result, String[] temp) {
35         int index = 0;
36         for (String str : result) {
37             while(temp[index] != null) {
38                 index++;
39             }
40             temp[index] = str;
41         }
42     }
43     
44     private List<String> arrayToList(String[] arr) {
45         List<String> list = new ArrayList<>();
46         for (String str : arr) {
47             list.add(str);
48         }
49         return list;
50     }

 

order pick-up and delivery problem

标签:print   add   array   new   ++   start   问题   parse   star   

原文地址:https://www.cnblogs.com/beiyeqingteng/p/11879686.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!