设为首页 加入收藏

TOP

C语言编程构造拉丁方阵和正交拉丁方阵组(七)
2018-03-02 06:57:27 】 浏览:1424
Tags:语言编程 构造 拉丁 方阵 正交
nbsp; }
      }
    }
}


int fill(int Lad[][N], int position[][N], int hold[][N], int i, bool TF)
{
    int k, j;


    if (TF==true)
        k=0;    //从头开始填充i,行号置1
    else
        k=N-1;  //在当前数字i回溯,行号置尾行号


    while (1)  //对i的回溯试探开始
    {
        if (k==0)  //回溯至或开始填充第一行
        {
            for (j=position[k][i-1]+1; j<=N; j++)  //寻找第一行填充位置
            {
                if (hold[k][j-1]==0)
                  break;
            }


            if (j>N)  //第一行没有填充位置,填充失败,作必要的清理,返回0
            {
                Lad[k][position[k][i-1]-1]=0;
                hold[k][position[k][i-1]-1]=0;
                position[k][i-1]=0;
                return 0;
            }


            if (position[k][i-1]!=0)  //第一行已填充i
            {
                Lad[k][position[k][i-1]-1]=0;
                hold[k][position[k][i-1]-1]=0;  //必要的清理
            }


            position[k][i-1]=j;  Lad[k][position[k][i-1]-1]=i;  hold[k][position[k][i-1]-1]=1;  //填充i
            k++;  continue;  //试探下一行
        }
        else
        {
            if (find(i, position, hold, k)==0)  //在k+1行找不到i的填充位置
            {
                if (position[k][i-1]!=0)    //第k+1行已填充i
                {
                    Lad[k][position[k][i-1]-1]=0;
                    hold[k][position[k][i-1]-1]=0;  //必要的清理
                    position[k][i-1]=0;
                }
                k--;    //回溯至上一行
                continue;
            }
            else
            {
                if (position[k][i-1]!=0)  //第k+1行已填充i
                {
                    Lad[k][position[k][i-1]-1]=0;
                    hold[k][position[k][i-1]-1]=0;  //必要的清理
                }
                position[k][i-1]=find(i, posi

首页 上一页 4 5 6 7 8 下一页 尾页 7/8/8
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言求解线性方程组 下一篇C语言重解经典回溯算法案例-迷宫..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目