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

六角幻方—题解

时间:2015-03-22 09:08:49      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:六角幻方

标题:六角幻方

    把 1 2 3 ... 19 共19个整数排列成六角形状,如下:


    * * *
   * * * *
  * * * * *
   * * * * 
    * * *


    要求每个直线上的数字之和必须相等。共有15条直线哦!


    再给点线索吧!我们预先填好了2个数字,第一行的头两个数字是:15 13,参见图【p1.png】,黄色一行为所求。

技术分享
    请你填写出中间一行的5个数字。数字间用空格分开。

    这是一行用空格分开的整数,请通过浏览器提交答案,不要填写任何多余的内容(比如说明性的文字等)


解题思路:      DFS


源代码:





/**
 * 
 *  六角幻方搜索
 * 
 *
 */

public class Main1
{
	static int table[] = {1,2,3,4,5,6,7,8,9,10,11,12,14,16,17,18,19}; //内容
	public static void main(String[] args)
	{
		int arr[] = new int[17];
		boolean step[]= new boolean[20];
		step[15] = step[13] = true;
		
		dfs(arr, 0, step);
	}
	
	private static void dfs(int[] arr, int ws, boolean[] step)
	{
		if (ws == 5)
		{
			if (28 + arr[0] != arr[1] + arr[2] + arr[3] + arr[4])return;
		}
		if (ws == 6)
		{
			if (28 + arr[0] != 15 + arr[1] + arr[5]) return ;
		}
		if (ws == 10)
		{
			if (28 + arr[0] != arr[5] + arr[6] + arr[7] + arr[8] + arr[9])return;
		    if (28 + arr[0] != arr[0] + arr[4] + arr[9]) return;
		}
		if (ws == 11)
		{
			if (28 + arr[0] != 13 + arr[2] + arr[6] + arr[10]) return;
		}
		if (ws == 14)
		{
			if (28 + arr[0] != arr[10] + arr[11] + arr[12] + arr[13])return;
			if (28 + arr[0] != 13 + arr[3] + arr[8] + arr[13]) return;
		}
		if (ws == 15)
		{
			if (28 + arr[0] != arr[5] + arr[10] + arr[14]) return;
			if (28 + arr[0] != arr[0] + arr[3] + arr[7] + arr[11]+arr[14])return;
		}
		if (ws == 17)
		{
			if (28 + arr[0] != arr[14] + arr[15]+arr[16]) return;
			if (28 + arr[0] !=15+ arr[2]+arr[7] + arr[12]+arr[16]) return;
			if (28 + arr[0] != arr[9] + arr[13] + arr[16]) return;
			
			output(arr);return;
		}
		 for (int i = 0; i < table.length; i++)
		 {
			if (step[table[i]] == false)
			{
				step[table[i]] = true; 
				arr[ws] = table[i];
				dfs(arr, ws+1, step);
				step[table[i]] = false;
			}
		 }
	}

	private static void output(int[] arr)
	{
         for (int i = 0; i < arr.length; i++)
         {
        	 System.out.print(arr[i] + " ");
         }
	     System.out.println();
	}
}
技术分享

六角幻方—题解

标签:六角幻方

原文地址:http://blog.csdn.net/first_sight/article/details/44530613

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