无向回路的求法

来源:互联网 发布:mac 连接阿里云服务器 编辑:程序博客网 时间:2024/04/28 14:55

这个无向回路的求法是需要传入一个数组,这个数组是跟图形对应的,图形有几个点就是几乘几的数组,对角线上都是0,比如数组第二行第三列的位子上的数就是图形第2个点和第3个点相连就是1,否则就是0.不懂的可以给我留言,这个方法很好用的,效率很高的,我在求ArcGIS网格问题里面用了,相当高效的。

package chu.softanywhere;import java.util.ArrayList;import java.util.List;public class Getroad {private int road[][] = null;private List<int[]> li = new ArrayList<int[]>();public Getroad(int[][] a) {this.x1 = new int[a.length];this.x1[0] = 1;this.road = a;for (int i = 2; i < a.length; i++) {HaMiTonian(1, i);}}private int j;public List<int[]> road() {return this.li;}private int x1[] = null;public boolean bb(int x) {if (x == 1) {return true;} else if (x == 0) {return false;} else {return false;}}private void HaMiTonian(int m, int p) {if (m > p)return;while (true) {NextValue(m);if (x1[m] == 0)return;if (m == p && bb(road[x1[p] - 1][0]))display1();elseHaMiTonian(m + 1, p);}}private void NextValue(int k) {x1[k] = (x1[k] + 1) % (x1.length+1);if (x1[k] == 0)return;if (bb(road[x1[k - 1] - 1][x1[k] - 1])) {for (j = 0; j < k; j++) {if (x1[j] == x1[k])NextValue(k);}return;} else { NextValue(k);}}private void display1() {for (int i = 0; i < 7; i++) {System.out.print(x1[i]);}int[] x2=x1.clone();this.li.add(x2);System.out.println("");}}