| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2705 人关注过本帖
标题:关于全排列
只看楼主 加入收藏
codelet
Rank: 2
来 自:广东深圳
等 级:论坛游民
帖 子:61
专家分:37
注 册:2007-11-6
收藏
得分:0 
cpu 1800+ 从1输出到8需要56秒。。。。

Losing emotion, Finding devotion.
2007-11-16 18:57
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 

我的算法如下,用了递归,感觉虽然比较清晰,但是应该没有上面的那么高效。
使用printf的时候我等了好久,估计要个几分钟……
使用fprintf的时候好像花了三秒钟吧,我的AM2 64*2 3600+……

PS:找到了一些资料,发现自己的算法太笨了,就改了下……

[CODE]
#include <stdio.h>
#define N 9
int arr[]={1,2,3,4,5,6,7,8,9};
int count=0;
FILE* fp;
void fdisplay() {
for (int i=0;i<N;i++)
fprintf(fp,"%4d",arr[i]);
fprintf(fp,"\n");
count++;
}
void swap(int* l,int* r) {
int tmp=*l;
*l=*r;
*r=tmp;
}
void qp(int *a,int len,int lev) {
if (len==1)
fdisplay();
else
for (int i=0;i<len;i++) {
swap(a,a+i);
qp(a+1,len-1,lev+1);
swap(a,a+i);
}
}
void main() {
fp=fopen("a.txt","w");
qp(arr,N,1);
fclose(fp);
printf("count=%d\n",count);
getchar();
}
[/CODE]


[此贴子已经被作者于2007-11-19 13:48:04编辑过]


专心编程………
飞燕算法初级群:3996098
我的Blog
2007-11-17 15:08
feibiaili
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-11-17
收藏
得分:0 
这是我写的程序,直接写入到文件里,10个数的全排列大概就15秒左右.
用的递归,
#include<iostream>
#include<fstream>
using namespace std;
#define N 10

char a[]={'1','2','3','4','5','6','7','8','9','a'};
void p(int n){
    for(int j=n;j>1;j--){
        for(int i=1;i<j;i++){
            char x;
            if(a[N-i]<a[N-1-i]){
                x=a[N-i];
                a[N-i]=a[N-1-i];
                a[N-1-i]=x;
            };
        };
    };
}
void f(int n,fstream *fil){
    if(n==2){
        char x;
        fil->write(a,N);
        x=a[N-1];
        a[N-1]=a[N-2];
        a[N-2]=x;
        fil->write(a,N);
        return;
    }else{
        char x;
        for(int i=0;i<n;i++){
            p(n);
            x=a[N-n];
            a[N-n]=a[N-n+i];
            a[N-n+i]=x;
            p(n-1);
            f(n-1,fil);
        };
    };
}
void main(){
    fstream files;
    files.open("1.txt");
    f(N,&files);
    files.close();

}
2007-11-23 10:47
zhaoyg
Rank: 1
等 级:新手上路
帖 子:328
专家分:0
注 册:2006-8-28
收藏
得分:0 
这是我以前写的,10个数不输出时用2秒多,若输出到文件估计也慢不了多少
/*
用递归实现排列(只针对无重复数字)
07.6.13
*/
#include<stdio.h>
#include <time.h>
#define M 10
FILE *pf;

void fun(int a[][M],int c);
int out[M];

int main()
{
    int a[2][M]={{1,2,3,4,5,6,7,8,9,0},{0,0,0,0,0,0,0,0,0,0}};
    int c=1;   

    clock_t start, finish;
    start = clock();
    fun(a,c);
    finish = clock();
     printf( "%u seconds\n", finish - start );
    
    getchar();
    return 0;
}

void fun(int a[][M],int c)
{
    int i;
    int j;
    int enter=0;

    for (i=0;i<M;i++)
    {
        if (a[1][i]==0)
        {
            a[1][i]=1;  
            out[c-1]=a[0][i];              

              if (c!=M)   
                fun (a,c+1);
            a[1][i]=0;
        }
    }
}

麻雀飞上枝头变凤凰,而菜鸟的我飞上枝头却感冒了,为什么我的脑袋如此的不管用呢。
2007-11-27 13:04
快速回复:关于全排列
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042047 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved