注册地址 登录
数学建模社区-数学中国 返回首页

水木年华zzu的个人空间 http://www.madio.net/?94765 [收藏] [复制] [分享] [RSS]

日志

回旋矩阵的两种算法

已有 1191 次阅读2011-5-3 17:26 |个人分类:学习心得

闲的无聊,研究了一下,回旋矩阵的两种算法。实现的功能就是,输入一个整数N,返回一个回旋矩阵。
所谓回旋矩阵呢,举个例子就知道了:3×3的矩阵
1 2 3 
8 9 4
7 6 5 
4×4的矩阵:
1  2  3   4
12 13 14  5
11 16 15  6 
10  9  8  7

第一种算法:递归算法:
#include <stdio.h>

void ptr(int n,int c,int s,int a[100][100]) {
    int i;
    if(n>2) {
        for(i=0; i<n; i++){
        a[c][c+i] = s;
s++;
        }
            
        for(i=1; i<n; i++){
        a[c+i][c+n-1] = s;
        s++;
        }
           
        for(i=2; i<=n; i++){
        a[c+n-1][c+n-i] = s;
   s++;
        }
            
        for(i=2; i<n; i++){
        a[n-i+c][c] = s;
   s++;
           
        }
            
        n -= 2, c++;
        ptr(n,c,s,a); }
    else if(n == 2) {
        a[c][c] = s;
        a[c+1][c] = s+1;
        a[c+1][c+1] = s+2;
        a[c][c+1] = s+3; }
    else if(n == 1) {
        a[c][c] = s; } }

int main() {
    int n, a[100][100], i, j;
    scanf("%d",&n);
    ptr(n,0,1,a);
    for(i=0; i<n; i++) {
        for(j=0; j<n; j++)
            printf("%4d",a[i][j]);
        printf("\n"); }
    return 0; }

第二种算法:按照顺时针的方向给矩阵赋值,思想和递归差不多
#include<stdio.h>
void convolute(int n,int c,int s,int a[100][100]){

if (n==1){
a[c][c]=s;
}else if (n==2){
a[c][c] =s;
a[c][c+1] =s+1;
a[c+1][c] =s+3;
a[c+1][c+1] =s+2;

}else{
    while (n>=1){
for (int i=0; i<n; i++){               //向右给矩阵赋值 
a[c][c+i] = s;
s++;
}
for (int j=0; j<n-1; j++){              //向下给矩阵赋值 
a[c+j+1][c+n-1] =s;
s++;
for (int k=n-2; k>=0; k--){           //向左给矩阵赋值 
a[c+n-1][c+k] =s;
s++;
for (int l=n-2; l>0; l--){           //向上给矩阵赋值 
a[c+l][c] =s;
s++;
}
c++;
n-=2;
}

}
}
int main() {
    int n, a[100][100], i, j;
    scanf("%d",&n);
    convolute(n,0,1,a);
    for(i=0; i<n; i++) {
        for(j=0; j<n; j++)
            printf("%4d",a[i][j]);
        printf("\n"); }
    return 0; }

欢迎大家批评指正,如有更好的方法恳请赐教,小生在此谢过

路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2025-8-2 13:11 , Processed in 0.278471 second(s), 29 queries .

回顶部