务虚笔记

Li Xiaowei's blog


  • 首页

  • 分类

  • 归档

  • 关于

  • 搜索
close
魔方构造问题 | 务虚笔记 - wuxubj,个人博客
务虚笔记

Li Xiaowei's blog


  • 首页

  • 分类

  • 归档

  • 标签

  • 留言

  • 爱的纪念

  • 搜索
close

魔方构造问题

发表于 2016-06-30   |   分类于 算法与数据结构   |  

《数据结构(C语言版)》学习笔记:魔方构造算法(p23)

魔方产生法则

把1放入第一行最中间的方格中,向左上方移动,并按照数字的递增顺序,把数字填入空方格。如果移出了魔方(即越过了魔方边界),则进入魔方对边的对应方格,继续填写方格。如果一个方格已被填入数字,则向下继续填入方格。

魔方构造算法C语言实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
int magic_square(int square[][MAX_SIZE], int size)
{

int row, col;
int i, j, count;
if (size<1 || size>MAX_SIZE)
return 1;
if (size % 2 == 0)
return 2;

for (i = 0; i < size; i++) //魔方每个元素初始化为0
for (j = 0; j < size; j++)
square[i][j] = 0;
i = 0; j = (size - 1) / 2;
square[i][j] = 1;//将1放入第一行最中间的方格中
for (count = 2; count <= size*size; count++)//依次放入2,3,...,size*size
{
row = (i - 1 >= 0) ? (i - 1) : (size - 1);//寻找下一个位置
col = (j - 1 >= 0) ? (j - 1) : (size - 1);
if (square[row][col])//下一个位置已被填入数字
i = (++i) % size;//数字填写到下一个位置之前一个位置的正下方
else //下一个位置没有被填入数字
{
i = row; //数字填写到下一个位置
j = col;
}
square[i][j] = count;
}
return 0;
}

i,j与row,col的作用分析

测试主函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 15
int magic_square(int square[][MAX_SIZE], int size);
void print_square(int square[][MAX_SIZE], int size);
int main()
{

int square[MAX_SIZE][MAX_SIZE];
int size;
printf("Enter the size of the square:");
scanf_s("%d", &size);
int flag=magic_square(square, size);
if (flag == 1)
fprintf(stderr, "Error! Size is out of range.\n");
else if (flag==2)
fprintf(stderr, "Error! Size is even.\n");
else{
printf("Magic Square of size %d :\n\n", size);
print_square(square, size);
}
printf("\n");
system("pause");
return 0;
}

void print_square(int square[][MAX_SIZE], int size)
{

for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
printf("%5d", square[i][j]);
printf("\n");
}
}
------ 本文结束 ------
wuxubj wechat
扫一扫,用手机访问本站
#算法 #魔方构造
非诚勿扰20160702
递归产生全排列
  • 分享到:
  • 微博
  • QQ空间
  • 腾讯微博
  • 微信
  • 文章目录
  • 站点概览
wuxubj

wuxubj

记录敲过的代码、走过的人生

14 日志
7 分类
16 标签
RSS
GitHub Weibo
友情链接
建站日志 学习计划
  1. 1. 魔方产生法则
  2. 2. 魔方构造算法C语言实现
  3. 3. i,j与row,col的作用分析
  4. 4. 测试主函数
© 2016 wuxubj
由 Hexo 强力驱动
主题 - NexT.Pisces
wuxubj

wuxubj

记录敲过的代码、走过的人生

19 日志
10 分类
26 标签
RSS High
GitHub Weibo
友情链接
建站日志 学习计划
© 2016 - 2017 wuxubj
由 Hexo 强力驱动
主题 - NexT.Pisces
鄂ICP备16017973号
扫二维码
扫一扫,用手机访问本站

扫一扫,用手机访问本站

发送邮件