算法 数字排列问题
2016-12-21 16:30
218 查看
题目
有7对数字:两个1,两个2,两个3,…两个7,把它们排成一行。要求:两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。如下就是一个符合要求的排列: 17126425374635 当然,如果把它倒过来,也是符合要求的。请你找出另一种符合要求的排列法,并且这个排列法是以74开头的。
注意:只填写这个14位的整数,不能填写任何多余的内容,比如说明注释等。
74****4*7*****
分析
回溯法解决,注意,每次填写数字都要填两个位置。#include <stdio.h> #include <math.h> #define m 14 int a[14]={0}; bool ok(int x){ for(int i=0;i<x;i++){ if(a[i]==a[x]){//填过了 return false; } } return true; } void dfs(int t){ if(t==m){ //打印一下 for(int i=0;i<m;i++){ printf("%d",a[i]); } return; } if(a[t]==0){//t位置没有数字 for(int i=1;i<=7;i++){ a[t]=i;//第1个位置填入1~7 //每次填写数字都要填两个位置,t是第一个位置,t+i+1是第二个位置 if(a[t+i+1]==0 && ok(t)){//第二个位置不能有初始数字并且没有填过 a[t+i+1]=i;//第2个位置填入1~7 dfs(t+1);//下一层 a[t+i+1]=0;//吐出第2个位置 } a[t]=0;//吐出第1个位置 } }else{ dfs(t+1);//t位置有数字,往下走 } } int main(){ a[0]=7,a[1]=4,a[6]=4,a[8]=7;//初始存在的 dfs(2);//0,1,2开始 return 0; }
相关文章推荐
- 排列组合问题的通用算法
- 求有重复数字的全排列算法。
- 排列组合问题的通用算法
- 〖編程·C++〗回溯算法:排列树 - 工作分配问题
- 〖編程·C++〗回溯算法:排列树 - N皇后问题
- 算法-数组:螺旋数字排列
- 排列问题算法
- 算法考试填数字问题
- 【算法总结-排列组合与子集问题】排列组合与子集问题
- 算法之排列问题
- 统计数字问题[算法设计与分析]
- 统计数字问题-算法实现(暴力统计法)
- 排列组合问题的通用算法
- 数字排列问题
- 排列组合问题的通用算法
- 问题描述如下: 有2.5亿个整数(这2.5亿个整数存储在一个数组里面,至于数组是放在外存还是内存,没有进一步具体说明); 要求找出这2.5亿个数字里面,不重复的数字的个数; 另外,可用的内存限定为600M; 要求算法尽量高效,最优;
- 恶补算法与数据结构(一)——排列问题
- 最简单的贪心算法--删除数字问题
- 全排列算法递归及STL实现,八皇后问题