手机九宫格穷举法,遍历

1,连接规则

(1)一个点最多与两个其它的点相连。

(2) 在一条直线上的两个端点,如果中间的端点没有被连接,那么这两个端点不能直接相连

(3)线段是有方向的。<1,2>与<2,1>不同

<pre name="code" class="java">package xmltool2;

public class Suoping {
	 
	public static int[][] answer=new int[3][3];//存放数据,
	public static int  total=0;
	public static void main(String args[]){
		int grid[][]=new int[3][3];
		init(grid,1);
		int sum=0;
		for(int i=1;i<=9;i++){
			suoping(grid,i);
			System.out.println(total);
			sum=sum+total;
			total=0;		
		}
		System.out.println(sum);		
	}
	
	public static void init(int [][]array,int value){
		for(int i=0;i<array.length;i++)
			for(int j=0;j<array[i].length;j++){
				array[i][j]=value;
			}
		
	}
	public static void suoping(int[][] grid,int count){
		if(count==1){
			for(int r1=0;r1<3;r1++){
				for(int c1=0;c1<3;c1++){	
					//与上一个节点可以连接,并且此节点没有已选
					if(grid[r1][c1]==1&&answer[r1][c1]==0){
						answer[r1][c1]=count;
				//		output(answer);
						answer[r1][c1]=0;
						total++;
					}
				}
			}

		}else{
			for(int r=0;r<3;r++){
				for(int c=0;c<3;c++){	
					//节点可以连接,并且此节点没有已选
					if(grid[r][c]==1&&answer[r][c]==0){
							answer[r][c]=count;
							suoping( canLink(r,c),count-1);
							//返回上一个状态
							answer[r][c]=0;
						}	
					}
				
				}
			}
	}

	
	//可与当前点能够连接的点
	public static int[][] canLink(int i,int j){
		int link[][]=new int[3][3];
		for(int r=0;r<3;r++){
			for(int c=0;c<3;c++){	
				int rc=r+i;
				int yc=c+j;
				if(rc%2==0&&yc%2==0){
					if(answer[rc/2][yc/2]!=0){
						link[r][c]=1;
	
					}else{link[r][c]=-1;}
					
				}else{
					link[r][c]=1;
				}
			}
		}

		return link;
	}
	
	//输出九宫格,连接顺序为按数值从大到小
	public static void output(int array[][]){
		for(int i=0;i<array.length;i++){
			for(int j=0;j<array[i].length;j++){
				System.out.print(array[i][j]+"  ");
			}
			System.out.println("");
		}
		System.out.println("-----------");	
		
	}
}

所有遍历情况 http://download.csdn.net/detail/xxuummeenngg/7381115
 
</pre><pre code_snippet_id="356405" snippet_file_name="blog_20140521_1_4510622" name="code" class="java">

9
56
320
1624
7152
26016
72912
140704
140704
总共389497

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值