| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 547 人关注过本帖
标题:新人求救,一个程序搞不定!
只看楼主 加入收藏
e9ly
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-7-9
收藏
 问题点数:0 回复次数:4 
新人求救,一个程序搞不定!
#define LENGTH 4
#include <stdio.h>
main()
{
   char source[LENGTH];
   int counter;
   void Permute(char[],int,int);
   for(counter=0;counter<LENGTH;counter++){
     source[counter]='a'+counter;
     }
   PERmute(source,LENGTH,0);
   }
void Permute(char source[],int length,int front)
{
   char buffer[LENGTH];
   int counter;
   int number;
   int index;
   if(front==length-1){
       printf("\n");
       for(counter=0;counter<length;counter++){
      printf("%4c",source[counter]);
      }
       }
       else{
        for(number=front;number<length;number++){
           for(counter=0;counter<front;counter++){
          buffer[counter]=source[counter];
        }
        buffer[front]=source[number];
        index=front+1;
        for(counter=front;counter<length;counter++){
             if(counter!=number){
              buffer[index++]=source[counter];
              }

             }
             Permute(buffer,length,front+1);
        }
         }
     }


在TC2.0环境下出现了这样的错误: inker error: undefined symbol '_PERmute' in moldule QPAILIE.C

什么意思啊? PERMUTE是排列的意思,难道说我的TC2.0缺少东西?
搜索更多相关主题的帖子: 新人 
2008-07-29 13:55
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
因为C语言严格区分大小写
你的函数定义是Permute,调用的时候却是PERmute
编译器认为这两个名字是不同的

从BFS(Breadth First Study)到DFS(Depth First Study)
2008-07-29 14:06
e9ly
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-7-9
收藏
得分:0 
很感谢,能否帮我解释下else{
        for(number=front;number<length;number++){
           for(counter=0;counter<front;counter++){
          buffer[counter]=source[counter];
        }
        buffer[front]=source[number];
        index=front+1;
        for(counter=front;counter<length;counter++){
             if(counter!=number){
              buffer[index++]=source[counter];
              }

             }
             Permute(buffer,length,front+1);
        }
         }
这段。主要index=front+1;之后很迷茫
2008-07-29 14:18
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
首先你要明白,这个排列是怎么产生的。通过不断替换掉front地方的字符,来产生排列。比如123
front=0的时候,第1个位置分别取1,2,3,然后递归调用Permute函数,对后面的字符产生排列。
比如front=0,循环的第一次,counter=0的时候,第一个位置选了1,将“23”交给Permute递归去产生排列,最终产生123,132。
然后counter=1,第一个位置选了2,将“13”交给Permute,产生了213,231。
等等

解释了原理,代码应该很容易看懂了吧?

顺便提醒你,这样好浪费的。原地进行替换会快很多。

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-07-29 14:26
e9ly
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-7-9
收藏
得分:0 
太感谢了,我认你做师傅吧。我是初学者,但我很感兴趣。
2008-07-29 14:53
快速回复:新人求救,一个程序搞不定!
数据加载中...
 
   



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

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