美文网首页
回溯拉丁矩阵

回溯拉丁矩阵

作者: Super_邓帅 | 来源:发表于2017-01-02 10:43 被阅读0次


现有n种不同形状的宝石,每种宝石有足够多颗。欲将这些宝石排列成m行n列的一个矩阵,m<=n,使矩阵中每一行和每一列的宝石都没有相同的形状。试设计一个算法,计算出对于给定的m和n,有多少种不同的宝石排列方案。

分析:

宝石n种,又是n列,所以可以认为保证每一行的宝石都不同(关键),判断的时候只判断列是否相同就行

#include<stdio.h>
#define n 3
#define m 3
int a[m][n];
int count=0;

bool OK(int x,int y){//因为之前已经保证每一行都是不同的,所以OK方法只判断列相不相同就行
    for(int i=0;i<x;i++){
        if(a[x][y]==a[i][y])
            return false;
    } 
    return true;
}

void traceback(int x,int y){
    int temp;
    for(int i=y;i<n;i++){
        temp=a[x][y];
        a[x][y]=a[x][i];
        a[x][i]=temp;
        if(OK(x,y)){
            if(x==m-1){//到达最后一行 
                if(y==n-1){//到达最后一列 
                    count++;
                    return; 
                }else{
                    traceback(x,y+1);   
                }
            }else{//还没有到达最后一行
                if(y==n-1){//到达某一行的最后一列 
                    traceback(x+1,0);
                }else{
                    traceback(x,y+1);
                }
            }
        }
        temp=a[x][y];
        a[x][y]=a[x][i];
        a[x][i]=temp;
    } 
}

int main(){
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            a[i][j]=j+1;//每一行都是1 2 3 ... n ,保证每行内宝石种类都不会重复 
        }
    }
    traceback(0,0); 
    printf("%d",count);
    return 0;
} 
运行截图

相关文章

  • 回溯拉丁矩阵

    现有n种不同形状的宝石,每种宝石有足够多颗。欲将这些宝石排列成m行n列的一个矩阵,m<=n,使矩阵中每一行和每一列...

  • 剑指Offer(二)

    题目汇总11.旋转数组的最小数字(简单),本题考查查找和排序12.矩阵中的路径—回溯问题(中等),本题考查回溯法1...

  • All for PAT秋考 | 可能是2016.3甲级

    输入处理 sstream sprintf 花里胡哨最短路的注意点 图的存储尽量用邻接矩阵(回溯方便) Dijkst...

  • 回溯法——矩阵中的路径

    回溯法回溯法可以看成蛮力法的升级版,它从解决问题每一步的所有可能选项里系统地选择出一个可行的解决方案。回溯法非常适...

  • 《剑指Offer》回溯法

    回溯法 通常物体或人在二维方格运动这类问题都可以用回溯法解决,一般把矩阵看成二维数组。 面试题 题目描述:请设计一...

  • 各种DFS

    DFS邻接矩阵遍历图 DFS邻接表遍历图 DFS回溯(不走重复路径) DFS背包(可重复选) DFS背包(不可重复选)

  • 12-矩阵中的路径-回溯

    请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步...

  • LeetCode-Unique Paths

    题目要求: 二维矩阵,从左上角到右下角共有多少条路 只能向前或向下 解法: 回溯(超时,不能AC) Dp: f[i...

  • [JS]回溯算法之矩阵中的路径

    题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,...

  • 《剑指Offer》回溯 矩阵中的路径

    题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格...

网友评论

      本文标题:回溯拉丁矩阵

      本文链接:https://www.haomeiwen.com/subject/vbrwvttx.html