首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

星级以上

2012-02-13 
星级以上高手请进穷举法是列出所有可能的情况,但他是如何穷举的,请大家谈谈理解比如:排列组合问题[解决办

星级以上高手请进
穷举法是列出所有可能的情况,但他是如何穷举的,请大家谈谈理解
比如:排列组合问题

[解决办法]
很早之前写的,递归的方式穷举
====================
/N 个数字的所有排列组合
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int *arg=0;//数组
int Num=0;//数组个数
void fun(int x);
int t=0;
int main()
{
int i=0;
scanf( "%d ",&Num);
arg=(int*)malloc(sizeof(int)*Num);
for(i=0;i <Num;i++){
arg[i]=i+1;
}
fun(Num);
free(arg);
return 1;
}
void fun(int aix)
{
int temp=0;
int i=0;
int* p=NULL;
if(1==aix){
for(i=0;i <Num;i++)
printf( "%d ",arg[i]);
printf( "\n ");
}
if(2==aix){
fun(aix-1);
t=arg[0];
arg[0]=arg[1];
arg[1]=t;
fun(aix-1);
}
if(2 <aix){
p=(int*)malloc(sizeof(int)*aix);//临时数组
memcpy(p,arg,aix*sizeof(int));
for(i=0;i <aix;i++){
memcpy(arg,p,aix*sizeof(int));
temp=arg[i];
arg[i]=arg[aix-1];
arg[aix-1]=temp;
fun(aix-1);
}
memcpy(arg,p,aix*sizeof(int));
free(p);
}
}

热点排行