| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1886 人关注过本帖
标题:回溯法求解1....n个整数的所有全排列并输出
只看楼主 加入收藏
sunjinlong
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2008-11-19
结帖率:100%
收藏
 问题点数:0 回复次数:3 
回溯法求解1....n个整数的所有全排列并输出
请大侠帮忙!
搜索更多相关主题的帖子: 输出 求解 回溯 排列 整数 
2010-03-08 20:57
asdjc
Rank: 6Rank: 6
来 自:武汉
等 级:侠之大者
威 望:7
帖 子:98
专家分:487
注 册:2010-1-22
收藏
得分:0 
你是要排序吗?有好多现成的排序法,如:快速排序,堆栈排序,冒泡排序等。
2010-03-28 14:22
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
http://baike.baidu.com/view/45.htm?fr=ala0_1

回溯法 要我们用这个给他做题呢 看不明白
哎 算法没学到家 到现在还没理解回溯法!
什么深度优先 得复习数据结构了 落伍太多了
2010-03-28 15:42
sunjinlong
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2008-11-19
收藏
得分:0 
自己写的,实在落伍太多了。。。
#include <stdio.h>
/*回溯法求解1.....n的全排列问题*/

int isLegal(int B[],int n,int k){
/*若数组元素个数为n并且B中元素各异,则认为是最终解*/
    int i;
    int j;
    int flag=1;
    if(k==(n-1)){
        for(i=0;i<=k;i++){
            j=0;
            while(j<=k){
                 if((i!=j)&&(B[i]==B[j])){
                        flag=0;
                }
                j++;
            }
        }
    }else{
        flag=0;
    }
    return flag;
}

int isPart(int B[],int n,int k){
/*若数组元素个数小于n并且B中元素各异,则认为是部分解*/
    int i;
    int j=0;
    int flag=1;
    if(k<n-1){
        for(i=0;i<=k;i++){
            j=0;
            while(j<=k){

                if((i!=j)&&(B[i]==B[j])){
                        flag=0;
                }
                j++;
            }
        }
    }else{
        flag=0;
    }
    return flag;
}


void  pailie(int B[],int n){
    /*回溯迭代算法*/
    int k,j;
    int count=0;

    k=0;
    while(k>=0){
        while(B[k]<=n-1){
            B[k]=B[k]+1;
            if(isLegal(B,n,k)){
                /*储存或输出解向量*/
                printf("%2d:  ",++count);
                for(j=0;j<n;j++){
                    printf("%2d  ",B[j]);
                }
                printf("\n");
                break;

            }
            else if(isPart(B,n,k)){
                k=k+1;

            }
        }

        B[k]=0;
        k=k-1;
    }
}

void main(){
    int B[4]={0,0,0,0};
    printf("The list is as belows:\n");
    pailie(B,4);

    getch();
}
2010-04-04 19:08
快速回复:回溯法求解1....n个整数的所有全排列并输出
数据加载中...
 
   



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

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