QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 6458|回复: 7
打印 上一主题 下一主题

求用MATLAB编写一个矩阵程序的方法

[复制链接]
字体大小: 正常 放大
yyx26 实名认证       

30

主题

6

听众

4277

积分

升级  75.9%

  • TA的每日心情
    开心
    2014-2-6 09:16
  • 签到天数: 52 天

    [LV.5]常住居民I

    新人进步奖 发帖功臣 最具活力勋章

    群组数学建模

    群组数学趣味、游戏、IQ等

    群组LINGO

    群组C 语言讨论组

    群组岩土力学与地下工程

    跳转到指定楼层
    1#
    发表于 2010-12-8 14:28 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta |邮箱已经成功绑定
    产生一个9*9的矩阵,要求满足:
    (1).矩阵的每一个元素都是由数字1-9组成
    (2).矩阵的每一行,每一列的数字都不许重复.
    (3).若将该矩阵分成一个3*3的分快矩阵,它的每一个元素是一个3*3的小矩阵,这些小矩阵中的数字也不能重复.
    (4).每运行一次程序,产生的矩阵是不一样的,即结果应具有随机性.
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    hy282694        

    2

    主题

    3

    听众

    131

    积分

    升级  15.5%

  • TA的每日心情
    开心
    2014-11-18 08:28
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    回复

    使用道具 举报

    753085848 实名认证       

    8

    主题

    3

    听众

    448

    积分

    升级  49.33%

  • TA的每日心情
    开心
    2011-10-7 20:45
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    自我介绍
    目前正在数模培训中
    回复

    使用道具 举报

    linmatsas 实名认证       

    53

    主题

    13

    听众

    3591

    积分

    逍遥游

  • TA的每日心情
    奋斗
    2014-12-2 09:53
  • 签到天数: 54 天

    [LV.5]常住居民I

    自我介绍
    额。。。。世界上最讨厌的事情就是自我介绍。。。

    邮箱绑定达人 新人进步奖 发帖功臣 最具活力勋章

    群组Matlab讨论组

    群组数学建模

    群组小草的客厅

    群组2012数学一考研交流

    群组C 语言讨论组

    回复

    使用道具 举报

    hy282694        

    2

    主题

    3

    听众

    131

    积分

    升级  15.5%

  • TA的每日心情
    开心
    2014-11-18 08:28
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    回复

    使用道具 举报

    hy282694        

    2

    主题

    3

    听众

    131

    积分

    升级  15.5%

  • TA的每日心情
    开心
    2014-11-18 08:28
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    #include<stdio.h>
    #include<stdlib.h>
    int sd[81]={0};//存放数据,0表示代填数据
    void search(int);
    int checkrow(int,int);
    int checkcol(int,int);
    int checkgezi(int,int,int);
    int panduan(int,int);
    void print();

    void main()
    {
    //        int i;
    //        for(i=0;i<81;i++)//读入数据
            //        scanf("%d",&sd[i]);
            printf("\n");
            search(0);
    }

    void search(int m)
    {
            int i;
            if(m>=81)//搜索完毕
            {
                    print();
            //        exit(0);
                    printf("\n");
            }
            else if(sd[m]!=0)//当前位置已经填了数字
                    search(m+1);
            else//对当前位置进行填数
            {
                    for(i=1;i<=9;i++)//1~9一个一个的试探
                    {
                            if(panduan(m,i))
                            {
                                    sd[m]=i;
                                    search(m+1);
                                    sd[m]=0;
                            }
                    }
            }
    }

    int panduan(int m,int i)
    {
            int row,col;
            int x,y,z;
            row=m/9;//求行
            col=m%9;//求列
            x=checkrow(i,row);
            y=checkcol(i,col);
            z=checkgezi(i,row,col);
            if(x==1&&y==1&&z==1)
                    return 1;
            return 0;
    }

    int checkrow(int m,int x)//检查同行,x为行数
    {
            int i;
            for(i=0;i<9;i++)
                    if(m==sd[x*9+i])
                            return 0;
            return 1;
    }

    int checkcol(int m,int y)//检查同列,y为列数
    {
            int i;
            for(i=0;i<9;i++)
                    if(m==sd[y+i*9])
                            return 0;
            return 1;
    }

    int checkgezi(int m,int x,int y)//x是行号,y是列号
    {
            int checkxiaogezi(int qx,int zx,int qy,int zy,int m);
            if(x>=0&&x<=2&&y>=0&&y<=2)//第一个小宫格
                    return checkxiaogezi(0,2,0,2,m);               
            if(x>=3&&x<=5&&y>=0&&y<=2)//第二个小宫格
                    return checkxiaogezi(3,5,0,2,m);               
            if(x>=6&&x<=8&&y>=0&&y<=2)//第三个小宫格
                    return checkxiaogezi(6,8,0,2,m);               
            if(x>=0&&x<=2&&y>=3&&y<=5)//第四个小宫格
                    return checkxiaogezi(0,2,3,5,m);                       
            if(x>=3&&x<=5&&y>=3&&y<=5)//第五个小宫格
                    return checkxiaogezi(3,5,3,5,m);                       
            if(x>=6&&x<=8&&y>=3&&y<=5)//第六个小宫格
                    return checkxiaogezi(6,8,3,5,m);               
            if(x>=0&&x<=2&&y>=6&&y<=8)//第七个小宫格
                    return checkxiaogezi(0,2,6,8,m);                       
            if(x>=3&&x<=5&&y>=6&&y<=8)//第八个小宫格
                    return checkxiaogezi(3,5,6,8,m);                       
            if(x>=6&&x<=8&&y>=6&&y<=8)//第九个小宫格
                    return checkxiaogezi(6,8,6,8,m);                       
    }

    void print()
    {
            int i;
            for(i=0;i<81;i++)
            {
                    printf("%d ",sd[i]);
                    if((i+1)%9==0)
                            printf("\n");
            }
    }

    int checkxiaogezi(int qx,int zx,int qy,int zy,int m)
    {
            int i,j;
            for(i=qx;i<=zx;i++)
                    for(j=qy;j<=zy;j++)
                            if(sd[i*9+j]==m)
                                    return 0;
            return 1;
    }

    已有 1 人评分威望 收起 理由
    madio + 1 原创内容

    总评分: 威望 + 1   查看全部评分

    回复

    使用道具 举报

    hy282694        

    2

    主题

    3

    听众

    131

    积分

    升级  15.5%

  • TA的每日心情
    开心
    2014-11-18 08:28
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    上面是我年轻的时候写的VC版本。改一改就行了。可以产生所有的你需要的数独。你运行一下就行了。自己挑一个结果吧~我技术有限,就帮到这儿了。
    你把他改写MATLAB版本就行了~
    回复

    使用道具 举报

    10

    主题

    3

    听众

    409

    积分

    升级  36.33%

  • TA的每日心情
    郁闷
    2012-9-25 04:42
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    群组数学建模

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2025-6-2 22:53 , Processed in 0.620104 second(s), 91 queries .

    回顶部