无向回路的求法

这个无向回路的求法是需要传入一个数组,这个数组是跟图形对应的,图形有几个点就是几乘几的数组,对角线上都是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();
			else

				HaMiTonian(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("");

	}

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值