| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 330 人关注过本帖
标题:一道全排列的问题!!求帮看看代码
取消只看楼主 加入收藏
Romantic8121
Rank: 2
等 级:论坛游民
帖 子:50
专家分:21
注 册:2011-4-11
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:0 
一道全排列的问题!!求帮看看代码
程序代码:
#include<stdio.h>
#include<stdlib.h>
int res[10];
void perm(int k,int a[]);
void swap(int *a,int *b);
void output(int *list);
void circle_right(int a[],int m,int i);
void circle_left(int a[],int m,int i);
int main(int c,char **v)
{
    int i,n;
    scanf("%d",&n);
    if(c==2)
        n=atoi(v[1]);    
    for (i=0;i<n;i++)
        res[i]=i+1;
        res[i]=0;
        perm(n,res);
}
void perm(int k,int a[])
{
    int i;
    if(k==1)
    {
        output(res);
        return;
    }
    for(i=0;i<k;i++)
    {
        swap(&a[0],&a[i]);
        circle_right(a,1,i);
        perm(k-1,&a[1]);
        circle_left(a,1,i);
        swap(&a[i],&a[0]);
    }
}
void swap(int *a,int *b)
{
    int tmp=*a;
    *a=*b;
    *b=tmp;
}
void output(int *list)
{
    for(;*list!=0;list++)
    {
        putchar(*list+'0');
        putchar(' ');
    }
    putchar('\n');
}
void circle_right(int a[],int m,int i)   
{   
    int temp;   
    int j,k;    
    for(k=1;k<=i-m;k++)   
    {   
        temp=a[i];   
        for(j=i;j>m;j--)   
            a[j]=a[j-1];   
            a[m]=temp;   
    }   
}   
void circle_left(int a[],int m,int i)   
{   
    int temp;   
    int j,k;    
    for(k=1;k<=i-m;k++)   
    {   
        temp=a[m];   
        for(j=m;j<i;j++)             
            a[j]=a[j+1];   
            a[i]=temp;   
    }   
} 

全排列数的问题 如
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
如果将每行上的输出看成一个数字,则所有输出构成升序数列。
我的问题是输出4的时候就出现了错误,似乎是void circle_right(int a[],int m,int i)和void circle_left(int a[],int m,int i)的问题,具体我不太清楚,求解答
2011-05-26 00:58
快速回复:一道全排列的问题!!求帮看看代码
数据加载中...
 
   



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

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