请指教!!各位高手求救哦!!!关于魔方阵数据结构问题

oscar1985 2008-06-25 02:53:22
#include <stdio.h>
#include <stdlib.h>
#define MAX_NUM 500 /*这里可以修改最大阶*/
int main()
{
int rows = 0, center = 0, iArray[MAX_NUM][MAX_NUM];
int RowSet = 0, LineSet = 0, newRowSet = 0, newLineSet = 0;
int i = 0, j = 0;
int okNum = 0;

// set the items of array "iArray" to be 0
for ( i = 0; i < MAX_NUM; i++ )
for ( j = 0; j < MAX_NUM; j++ )
iArray[i][j] = 0;

// get the rows number
while ( 1 )
{
printf("输入行数:\n");
scanf("%d", &rows);
if ( rows <= MAX_NUM )
{
rows -= 1;
break;
}
else {
printf("行数必须在 0 和 %d 之间, 请重新", MAX_NUM);
}
}

// set number '1'
center = rows / 2;
iArray[0][center] = 1;

// initialize the okNum, RowSet and LineSet
okNum = 1;
RowSet = 0;
LineSet = center;

// set each item in "iArray"
while ( okNum < (rows + 1) * (rows + 1) )
{
if ( RowSet == 0 && LineSet == rows )
{
RowSet += 1;
}
else {
newRowSet = (RowSet == 0) ? rows : RowSet - 1;
newLineSet = (LineSet == rows) ? 0 : LineSet + 1;

if ( iArray[newRowSet][newLineSet] != 0 )
// there is already a number here!
{
RowSet = (RowSet == rows) ? 0 : RowSet + 1;
//RowSet += 1;
}
else{
RowSet = newRowSet;
LineSet = newLineSet;
}
}

iArray[RowSet][LineSet] = ++okNum;
}

// print the "iArray"
for ( i = 0; i <= rows; i++ )
{
for ( j = 0; j <= rows; j++ )
printf("%5d", iArray[i][j]);
printf("\n");
}

system("pause");
return 0;
}
以上程序用到了哪些数据结构??怎样表达??? 麻烦各位高手点明一下小弟....清楚详细点,因为我是刚学,新手哦
...全文
110 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xibeitianlang 2008-07-01
  • 打赏
  • 举报
回复
程序定义了一个庞大的二维数组iArray[500][500],大多数情况是用不到的。
程序中只对奇数rows有效,但偶数也能通过,可以说是半拉子工程。
建议找一个完整的程序来学!
九十度黑 2008-06-29
  • 打赏
  • 举报
回复
用到了哪些数据结构??
用到了数组,线性表结构,顺序存储,可随机访问。
可口可乐 2008-06-25
  • 打赏
  • 举报
回复
http://mrjuy.wordpress.com/tag/%E9%AD%94%E6%96%B9%E9%98%B5/

魔方阵:

1.

是指一个数列矩阵的每一行,每一列和对角线的数的和均相等。
2.

魔方阵是奇数矩阵。

魔方阵中的数的排列规则:

1.

将 1 放在魔方阵的第1行中间一列
2.

从 2 开始直到n×n的各数依次按下列规则存放:每一个数存放的行比前一个数的行数减1,列数加1。
3.

如果上一个数的行数为 1 ,下一个数的行数为n;如果上一个数的列数为n,下一个数的列数为1.
4. 如果按上面的规则确定的位置上有数,或者上一个数是第1行第n列时,则把下一个数放在上一个数的下 面

例如:

8 1 6

3 5 7

4 9 2

大家可以按照上面的规律试试写一下5×5的魔方阵!写完了照着下面看看啊,呵呵.

17 24 1 8 15

23 5 7 14 16

4 6 13 20 22

10 12 19 21 3

11 18 25 2 9



转自:blog

(简单方法)总结:1:把 1 放在第一排的中间的位置,之后的每个数字都是在前一个数字的右上角,如果右上角有数字的话,就把它放在前一个数字的下面。

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧