zoukankan      html  css  js  c++  java
  • 关于回溯与n个数的全排列

      今天要讲的题目是全排列的问题:有1、2、3、...、n这样一个数列,要求输出其全排列。

      那么,显然,这道题目非常之简单,用一个标志数组变量,标记数字的使用情况,然后根据它挑选数字即可。由于题目很简单,在这就不多说了,来看看代码:

     1 #include<stdio.h>
     2 int n;
     3 int sum=0;//统计方法数 
     4 int a[10001]={0};//用于储存答案 
     5 int flag[10001]={0};//所有数字的标志变量初始化为0 
     6 void out();//函数用于输出 
     7 void f(int k);//函数用于求解 
     8 int main()
     9 {
    10     scanf("%d",&n);
    11     f(0);
    12     return 0;
    13 }
    14 void f(int k)
    15 {
    16     int i;
    17     for(i=1;i<=n;i++)
    18     {
    19         if(flag[i]==0)//如果i没有被使用过 
    20         {
    21             a[k]=i;//则选中i 
    22             flag[i]=1;//标记i为已使用 
    23             if(k==(n-1))//如果找到了所有n位数 
    24                 out();//输出 
    25             else    
    26                 f(k+1);//否则继续寻找下一位 
    27             flag[i]=0;//返回时还原现场 
    28             a[k]=0;
    29         }
    30     }
    31 }
    32 void out()
    33 {
    34     int i;
    35     sum++;//每执行一次该函数则说明有一个解 
    36     printf("%d:
    ",sum);
    37     for(i=0;i<n;i++)
    38         printf("%d ",a[i]);
    39     printf("
    ");
    40 }

      代码如有不足,欢迎指教!

  • 相关阅读:
    心血来潮学python
    lua中的table、stack和registery
    wrapper for lua
    FT232RL变砖之后
    12.04 redmine
    Webpack 概念
    如何学习 Webpack
    React基础篇
    Intellij实用技巧
    一行代码搞定图片缩放、旋转、加水印
  • 原文地址:https://www.cnblogs.com/LegendLa/p/4534030.html
Copyright © 2011-2022 走看看