回 帖 发 新 帖 刷新版面

主题:和图的算法问题

今天看到一个 3*3(1-9的数字组成,横竖斜线和都是15)的和图,想用C语言如何找出所有的和图呢? 能否在算法上给予指点下!

回复列表 (共3个回复)

沙发

回溯

板凳

#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 楼

到这个网站看有没有
算法源码吧 [url=http://www.sfcode.cn/]http://www.sfcode.cn/[/url]

我来回复

您尚未登录,请登录后再回复。点此登录或注册