回溯法打印方法介绍

回溯法打印方法介绍

一个全排列的递归算法,非常的简洁,转载自天极网

回溯法打印方法介绍#include<stdio.h>
回溯法打印方法介绍
回溯法打印方法介绍
voidprint_it(intn,intarr[]);
回溯法打印方法介绍
voidarrange_all(intsize,intarr[],intpos);
回溯法打印方法介绍
回溯法打印方法介绍
intmain()
回溯法打印方法介绍回溯法打印方法介绍
{
回溯法打印方法介绍回溯法打印方法介绍
inta[5]={1,2,3,4,5};
回溯法打印方法介绍arrange_all(
5,a,0);
回溯法打印方法介绍
return0;
回溯法打印方法介绍}

回溯法打印方法介绍回溯法打印方法介绍/*
回溯法打印方法介绍函数名:voidarrange_all(intsize,intarr[],intpos)
回溯法打印方法介绍描述:打印所有排列
回溯法打印方法介绍参数:
回溯法打印方法介绍size要排列的数据个数
回溯法打印方法介绍arr[]排列存放的数组
回溯法打印方法介绍pos当前排列位置
回溯法打印方法介绍
*/

回溯法打印方法介绍voidarrange_all(intsize,intarr[],intpos)
回溯法打印方法介绍回溯法打印方法介绍
{
回溯法打印方法介绍
inti,tmp;
回溯法打印方法介绍回溯法打印方法介绍
if(pos+1==size)/*如果已经排到最后*/
回溯法打印方法介绍回溯法打印方法介绍{
回溯法打印方法介绍回溯法打印方法介绍print_it(size,arr);
/*打印数组*/
回溯法打印方法介绍return;
回溯法打印方法介绍}

回溯法打印方法介绍回溯法打印方法介绍for(i=pos;i<size;i++)/*对当前位置后的所有位置排列*/
回溯法打印方法介绍回溯法打印方法介绍{
回溯法打印方法介绍回溯法打印方法介绍tmp
=arr[pos];/*交换位置*/
回溯法打印方法介绍arr[pos]=arr[i];
回溯法打印方法介绍arr[i]
=tmp;
回溯法打印方法介绍回溯法打印方法介绍
/*递归,继续后面的调用*/
回溯法打印方法介绍arrange_all(size,arr,pos+1);
回溯法打印方法介绍回溯法打印方法介绍
/*在交换回来,保持原有的排列次序*/
回溯法打印方法介绍tmp=arr[pos];
回溯法打印方法介绍arr[pos]
=arr[i];
回溯法打印方法介绍arr[i]
=tmp;
回溯法打印方法介绍}

回溯法打印方法介绍}

回溯法打印方法介绍
回溯法打印方法介绍
voidprint_it(intn,intarr[])
回溯法打印方法介绍回溯法打印方法介绍
{
回溯法打印方法介绍
inti;
回溯法打印方法介绍static
intcnt=0;
回溯法打印方法介绍printf(
"%04d: ",++cnt);
回溯法打印方法介绍
for(i=0;i<n;i++)
回溯法打印方法介绍printf(
"%2d",arr[i]);
回溯法打印方法介绍printf(
" ");
回溯法打印方法介绍}

回溯法打印方法介绍