主题:和图的算法问题
realent
[专家分:60] 发布于 2006-11-20 12:53:00
今天看到一个 3*3(1-9的数字组成,横竖斜线和都是15)的和图,想用C语言如何找出所有的和图呢? 能否在算法上给予指点下!
回复列表 (共3个回复)
沙发
rickone [专家分:15390] 发布于 2006-11-20 14:59:00
回溯
板凳
wwwzrccom [专家分:170] 发布于 2006-11-20 21:21:00
#include<stdio.h>
#define N 3
main()
{int a[N][N]={0},i,j,k;
i=0;j=N/2;a[i][j]=1;
for(k=2;k<=N*N;k++)
{i=i-1;j=j+1;
if(i<0&&j==N)
{i=i+2;j=j-1;}
else
{if(i<0)i=N-1;
if(j==N)j=0;
}
if(a[i][j]==0)a[i][j]=k;
else {i=i+2;j=j-1;a[i][j]=k;}
}
printf("%方阵为:\n",N);
for(i=0;i<N;i++)
{for(j=0;j<N;j++)printf("%4d",a[i][j]);
printf("\n");
}
}
(1)首先决定数值1存放位值
(2)将2-9按"右上方"原则依次存入,行下标为i=i-1,列下标为i=j+1
当计算后的下标值出现以下情况时,进行相应的处理:
如果下标和列下标都越界,此时数应入在前一个已置数元数下一行同列位置上
如果只有行下标越界,则存放在当前列的最后一行位置
如果只有列下标越界,则存入在当前行的第一列位置上
(3)如果该位置上已存放过值(即元素不为0),此时应存放在前一个已置数元素下一行同列位置上
3 楼
billwang1 [专家分:0] 发布于 2007-05-13 21:57:00
到这个网站看有没有
算法源码吧 [url=http://www.sfcode.cn/]http://www.sfcode.cn/[/url]
我来回复