首页 新闻 赞助 找找看

求算法,哪位大神给个牛B一点的思路。

0
悬赏园豆:20 [已解决问题] 解决于 2015-12-11 16:06

public static string[] Stops = new string[] { "AB", "BC", "CD", "DC", "DE", "AD", "CE", "EB", "AE" };

 

算法:列举数组中包含的任意2个字母之间的路径集合。

比如:A-C  就有 ABC (AB - BC), ADC (AD - DC)

 

各位大神啊,救救我吧。

Eysa的主页 Eysa | 初学一级 | 园豆:62
提问于:2015-11-21 17:54
< >
分享
最佳答案
1
 1 package cnblogs;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 import java.util.Stack;
 6 
 7 /**
 8  * Created by Kischn on 2015/11/21.
 9  */
10 public class Test {
11 
12     public static int[][] m = new int[26][26];
13     public static void find(Stack<Integer> stack, List<Integer> way, int end){
14         if(stack.isEmpty()) return;
15         Integer tmp = stack.pop();
16         way.add(tmp);
17         int len = way.size();
18         if(tmp == end){
19             for(int j = 0; j < len - 2; j++){
20                 System.out.print((char)(way.get(j) + 'A'));
21                 System.out.print((char)((way.get(j + 1)) + 'A'));
22                 System.out.print("->");
23             }
24             System.out.print((char)(way.get(len - 2) + 'A'));
25             System.out.print((char)(way.get(len - 1) + 'A'));
26             System.out.println();
27         }else {
28             for (int i = 0; i < 26; i++) {
29                 if (m[tmp][i] == 1) {
30                     stack.push(i);
31                     find(stack, way, end);
32                 }
33             }
34         }
35         way.remove(len - 1);
36     }
37 
38     public static void main(String[] args) {
39         String[] Stops = new String[] { "AB", "BC", "CD", "DC", "DE", "AD", "CE", "EB", "AE" };
40         char start = 'A';
41         char end = 'C';
42         char a,b;
43         for(int i = 0; i < Stops.length; i++){
44             a = Stops[i].charAt(0);
45             b = Stops[i].charAt(1);
46             m[a - 'A'][b -'A'] = 1;
47         }
48         List<Integer> way = new ArrayList<Integer>();
49         Stack<Integer> stack = new Stack<Integer>();
50         stack.push(start - 'A');
51         find(stack, way, end - 'A');
52     }
53 
54 }
View Code

不好意思,我刚装系统没装VS,临时用Java写的,你看看吧~仅供参考,很业余的~

收获园豆:20
之奇一昂 | 小虾三级 |园豆:1421 | 2015-11-21 22:55

 兄台,多谢啦。

Eysa | 园豆:62 (初学一级) | 2015-11-22 00:21

@Eysa: 思路是构造的有向图,你的数据得保证不能有环啊~如果符合你要求,给分哦~

之奇一昂 | 园豆:1421 (小虾三级) | 2015-11-22 08:56

@之奇一昂:  m[a - 'A'][b -'A'] = 1;   这句代码是什么意思?  m明明是个int类型的啊,怎么还添加了字符?

Eysa | 园豆:62 (初学一级) | 2015-11-23 19:19

@Eysa: A-Z 分别减'A' 就是 0-26了~这是用数字来表示那些字母就方便多了,ASCII表中A-Z是连续的

之奇一昂 | 园豆:1421 (小虾三级) | 2015-11-23 19:56
其他回答(1)
0

有思路,可以实现。但是你的分太少了啊,我就不敲代码了。思路说下吧,你这字符串数组元素定义两个字符,分别为首字符,和尾字符。然后分别计算它们转换成ASCII码。开始循环判断,一个元素的首字符与另一个元素的尾字符是否相连,ASCII码之差是否为1。这样就可以实现了。我上半年的时候做一个项目类似这样的东西,比你这复杂多了。好好做做,可以搞定的。

SharpCJ | 园豆:242 (菜鸟二级) | 2015-11-27 22:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册