社区
C语言
帖子详情
关于填N*N格子的算法讨论......
98440622
2004-10-12 01:02:09
将1到N*N个自然数数填入N*N的方格中,使得行列对角的和都为一固定(可以根据N值计算出来),我做了一种算法,不过做4*4的格子有相当多的填法,不知道对不对,稍后贴上源码,大家对这个问题怎么考虑到?请高手指点~~~~~~~~~~~~~~~~~~~~~~~
3*3共8种填法,4*4呢?
...全文
354
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)
栅格系统布局网页
再后来,慢慢演变成运用固定的
格子
设计版面的平面设计风格栅格系统英文为 Grid Systems,也有翻译为网格系统。定义:运用固定的
格子
,遵循一定的规则,进行页面的布局设计,使布局规范简洁有规则
A*
算法
自学心得
这里写自定义目录标题1.1 概述1.2
算法
类比1.3 新增
算法
与优缺点对比1.4 BFS
算法
问题的出现 1.1 概述 这是一个寻径
算法
相信同学们都玩过某种游戏LOL人在塔在!!! ,在你用鼠标点击地面的某个地方的时候,你所...
部分acm题目的解题思路(转)
Problem 1346 - Exchange 用棋盘多项式和数论中的扩展欧几里德来做....f(n)=,m[110]存各学校的人数,n表示学校数,总人数为s,那么大棋盘多项式为f[m[0]]*f[m[1]]*...*f[m[n-1]];然后用一个数组xishu[10001]存多项
7-5 螺旋方阵 (20分) 所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个
格子
开始,按顺时针螺旋方向顺序
填
入N×N的方阵里。本题要求构造这样的螺旋方阵。
代码思路: 1.先尝试构造出外圈数字 /* 顺序: up-right-down-left 1 2 3 4 5 16 0 0 0 6 15 0 0 0 7 14 0 0 0 8 ... int i,j,k,n,a[N][N]={0},value=1; scanf("%d",&n); //up for(j=.
幻方
证明:如果一个n阶幻方存在的话,所
讨论
的和一定等于n*(n^2+1)/2 设计一个穷举
算法
,生成阶数为n的所有幻方 更好的生成幻方的
算法
题解 证明:如果一个n阶幻方存在的话,所
讨论
的和一定等于n*(n^2+1)/2 对于一个n阶...
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章