美文网首页
回溯数字排列74..

回溯数字排列74..

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


有7对数字:两个1,两个2,两个3,...两个7,把它们排成一行。 要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。如下就是一个符合要求的排列: 17126425374635 当然,如果把它倒过来,也是符合要求的。 请你找出另一种符合要求的排列法,并且这个排列法是以74开头的。
注意:只填写这个14位的整数,不能填写任何多余的内容,比如说明注释等。

分析:

其实很容易想到t代表第几位数字,然后就是判断a[t]位置是否已经有数字,如果有,traceback(t+1),否则开始往里面放数,如果a[t]放数字i,那么a[t+i+1]也要放i,就得对a[t+i+1]是否为0做个判断。
  放进去之后,再通过OK()判断i是否和以前放进去的数字重复,如果重复的话,a[t],a[t+i+1]恢复为0,再考虑放i+1。

#include<stdio.h>
#define n 7
int a[n*2]={7,4,0,0,0,0,4,0,7,0,0,0,0,0};

bool OK(int t,int i){
    for(int j=0;j<n*2;j++){
        if(a[j]==a[t]&&t!=j&&j!=i)
            return false;
    }
    return true;
} 

void traceback(int t){
    if(t==n*2){        //14位已经全部走完 
        for(int i=0;i<n*2;i++)
            printf("%d",a[i]);
        putchar('\n'); 
        return;
    } 
    if(a[t]!=0){   //证明a[t]已经有数字了 
        traceback(t+1);
    }else{         //a[t]===0 ,可以放数字
        for(int i=1;i<=n;i++){
            if(a[t+i+1]!=0){
                continue;
            }else{             //a[t]==0&&a[t+i+1]==0
                a[t]=i;
                a[t+i+1]=i;
                if(OK(t,t+i+1)){
                    traceback(t+1);
                }
                a[t]=0;
                a[t+i+1]=0;
            }
        }
    }
}

int main(){
    traceback(0);   //t代表是第几位 
    return 0;
} 
运行截图

相关文章

  • 回溯数字排列74..

    有7对数字:两个1,两个2,两个3,...两个7,把它们排成一行。 要求,两个1间有1个其它数字,...

  • 排列组合与回溯法

    排列,组合,回溯法 ex.1 ex.2 排列 全排列:从第一个数字起,每个数字分别与它后面的数字交换 去重全排列:...

  • 剑指offer 39- 数字排列

    先看不包含重复数字的 输入一组数字(不包含重复数字),输出其所有的排列方式。样例 分析:回溯的经典题回溯的思路: ...

  • leetcode第46题:全排列 [中等]

    题目描述 给定一个 没有重复 数字的序列,返回其所有可能的全排列。 考点 回溯算法 深度优先搜索 解题思路 回溯算...

  • 生成全排列算法(Scala和C++实现)

    全排列问题描述为:给定一串数字,生成所有可能的排列。本文给出两类,一种使用C++通过回溯算法,一种使用Scala通...

  • 回溯--全排列

    目录[https://www.jianshu.com/p/85e18c21317a] 题号[https://lee...

  • LeetCode-46-全排列

    给定一个 没有重复 数字的序列,返回其所有可能的全排列。image.png 解题思路: 回溯 Python3代码:

  • 算法简记- 全排

    1、// 给定一个 没有重复 数字的序列,返回其所有可能的全排列。 回溯 2、// n 皇后问题 研究的是如何将...

  • Leetcode_46_全排列_hn

    题目描述 给定一个没有重复数字的序列,返回其所有可能的全排列。 示例 示例 1: 解答方法 方法一:回溯法 思路 ...

  • 回溯算法之-排列

    回溯算法之-组合总和请看:https://www.jianshu.com/p/2a9856b96a86[https...

网友评论

      本文标题:回溯数字排列74..

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