社区
C语言
帖子详情
关于填N*N格子的算法讨论......
98440622
2004-10-12 01:02:09
将1到N*N个自然数数填入N*N的方格中,使得行列对角的和都为一固定(可以根据N值计算出来),我做了一种算法,不过做4*4的格子有相当多的填法,不知道对不对,稍后贴上源码,大家对这个问题怎么考虑到?请高手指点~~~~~~~~~~~~~~~~~~~~~~~
3*3共8种填法,4*4呢?
...全文
406
21
打赏
收藏
关于填N*N格子的算法讨论......
将1到N*N个自然数数填入N*N的方格中,使得行列对角的和都为一固定(可以根据N值计算出来),我做了一种算法,不过做4*4的格子有相当多的填法,不知道对不对,稍后贴上源码,大家对这个问题怎么考虑到?请高手指点~~~~~~~~~~~~~~~~~~~~~~~ 3*3共8种填法,4*4呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
98440622
2004-10-20
打赏
举报
回复
我的算法比较简单,输入的N确定出关键值然后从左往右从上到下的顺序遍历N*N的每个格子,试探填入数字,填满一行判断是否符合条件,填满一列判断是否符合条件,都填满了判断对角是否符合条件,以此类推,其中需要退回的条件是当前格子没有可以填入的数字了,回溯到上一个格子选择数字,如果(0,0)位置的格子没有可选的数字了就认为全部解都已经找出,程序结束。
lanmeishui
2004-10-18
打赏
举报
回复
?????哎。睡觉了。明天来看!!·
rossi789
2004-10-18
打赏
举报
回复
rossi789@peoplemail.com.cn
lanmeishui
2004-10-18
打赏
举报
回复
昏,给你的E-MAIL我,
偶数的,可以做点小的
rossi789
2004-10-18
打赏
举报
回复
晕,用的是穷举.数字小点还行,数字一大就......
rossi789
2004-10-18
打赏
举报
回复
楼主能说说你程序的具体的算法么,代码看不懂.或者能否改动一下,改成输入一个偶数,然后输出幻方的程序.
newwww
2004-10-18
打赏
举报
回复
魔方问题吧
奇数的很好搞定了,偶数的至今没有好的解决办法
这里是奇数魔方的实现程序:
/***********************************************
* File: MagicSquare
* Author: SkyintheSea
* Email: proscv@avl.com.cn
************************************************/
#include <stdio.h>
#include <string.h>
//macros
#define M 3
#define N (2 * (M) + 1)
//global variables
int magicsquare[N][N];
int flag[N][N];;
int i;
int j;
int count;
//main entry
int main(void)
{
memset(flag, 0, sizeof(flag));
i = 0;
j = M;
count = 1;
magicsquare[0][M] = 1;
flag[0][M] = 1;
while (count != N * N)
{
count++;
if (i == 0)
{
i = 2 * M;
}
else {
i--;
}
if (j == 2 * M)
{
j = 0;
}
else {
j++;
}
if (flag[i][j] == 1)
{
if (i == 2 * M)
{
i = 1;
}
else {
i += 2;
}
if (j == 0)
{
j = 2 * M;
}
else {
j--;
}
}
magicsquare[i][j] = count;
flag[i][j] = 1;
}
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
printf("%4d", magicsquare[i][j]);
}
printf("\n");
}
return 0;
}
98440622
2004-10-18
打赏
举报
回复
看来可以结帖了
98440622
2004-10-16
打赏
举报
回复
如果是用穷举的方法搜索呢?
malligator
2004-10-16
打赏
举报
回复
你的方法就是穷举吧。
穷举法对于4阶以下的还行,多了一般的机器就受不了了:
3阶的幻方组合有10的4次方种;(10K)
4阶的幻方组合有10的12次方种;(1000G)
5阶的幻方组合有10的23次方种;(1000000千万G)
...........................
而生成幻方的时间复杂度应该在O(n*n)以上。
(顺便问一下,你是怎么生成幻方的,在那个地方?我看花眼了。:)
想想你的计算机速度,应该在3G/s以下吧
98440622
2004-10-16
打赏
举报
回复
是啊,我用的就是穷举的方法:
自左向右遍历每个格子,试探填入数字,先保证行符合条件,然后列符合条件,最后检查对角线。回溯的条件当前格中无可用的数字,找出全部解的条件第一个格子无可用的数字。
算5×5第一个都没出来,别说所有的解了:-)
rightyeah
2004-10-15
打赏
举报
回复
奇数阶幻方的构造是很容易的,有一套很简单的规则。偶数阶的就麻烦点,好像是要用4个奇数阶的合起来的(4阶的直接构造),以前我在一本入门级的basic书上看到过
98440622
2004-10-15
打赏
举报
回复
不明白楼上的意见?怎么叫满足奇数?
kavinsnow
2004-10-14
打赏
举报
回复
奇数的有算法,偶数好像就没有了,楼主所写的代码并不能满足奇数.
98440622
2004-10-14
打赏
举报
回复
再顶一下!
98440622
2004-10-13
打赏
举报
回复
我现在很想知道4×4到底能有多少种填法,我用上面的程序做了一下,一共有7040种填法,会有这么多吗?
Squall1009
2004-10-13
打赏
举报
回复
奇数的比较好做.偶数的估计没什么好的算法吧
你可以搜索一下魔方问题
kittypizza
2004-10-12
打赏
举报
回复
能把主要的计算方法的想法说说吗?
kittypizza
2004-10-12
打赏
举报
回复
等等啊,这是c++还是c?我正在努力中
98440622
2004-10-12
打赏
举报
回复
不会吧?没人做过吗?!
加载更多回复(1)
PHP树生成迷宫及A*自动寻路
算法
完整代码
迷宫
算法
是采用树的深度遍历原理,这样生成的迷宫相当的细,而且死胡同数量相对较少! 任意两点之间都存在唯一的一条通路。 至于A*寻路
算法
是最大众化的一全自动寻路
算法
数独谜题创建
算法
的设计
数独谜题创建
算法
的设计
七年级数学下册第八章整式的乘法8.1同底数幂的乘法数学家杨辉的故事素材新版冀教版
七年级数学下册第八章整式的乘法8.1同底数幂的乘法数学家杨辉的故事素材新版冀教版
一百题c语言一百个经典题目
一百题c语言一百个经典题目,来自酷勤网站,非常好的题目,与大家分享
A*
算法
自学心得
这里写自定义目录标题1.1 概述1.2
算法
类比1.3 新增
算法
与优缺点对比1.4 BFS
算法
问题的出现 1.1 概述 这是一个寻径
算法
相信同学们都玩过某种游戏LOL人在塔在!!! ,在你用鼠标点击地面的某个地方的时候,你所操控的人物会十分智能地寻找一条最短的路前进到你所指定的位置,不论范围大小,这种
算法
都很快。 1.2
算法
类比 看完这样一个功能,似乎实现起来很简单 似乎我们也可以...
C语言
70,037
社区成员
243,243
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章