| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2329 人关注过本帖
标题:C语言实现字典序法
只看楼主 加入收藏
gengning938
Rank: 2
等 级:论坛游民
帖 子:12
专家分:10
注 册:2010-5-13
结帖率:60%
收藏
已结贴  问题点数:10 回复次数:5 
C语言实现字典序法
求教,C语言如何实现字典序法
搜索更多相关主题的帖子: C语言 字典 
2010-07-11 22:04
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:3 
////////////////////////////////////////////////////////////////////////////////////////////
//排列,测试函数略
void   print(int   *x,int   n)   
//自定义执行函数   
{   
for(int   i=1;i<=n;i++)   
  printf("%4d",x);   
printf("\n");   
}   
void perm2( int n )
//n个元素的全排列(字典序法)
{
int *a = new int[n+1];
int k,s,t;
k = s = 0;
a[0] = 0;
if (n > 1) //元素个数必须大于1
{
  for ( int j = 1; j < n + 1; j ++ )
   a[j] = a[j-1] + 1; //初始化排列为1,2,3,...,n
  print( a, n ); //打印一组排列
  j = 0;
  while ( j < n )
  {
   //求下一组排列
   for ( int i = 2; i < n + 1; i ++ )
    if ( a[i-1] < a )
     k = i;
    a[0] = a[k-1];
   for ( i = 1; i < n + 1; i ++ )
    if ( a[0] < a )
     s = i;
   a[k-1] = a;
   a = a[0];
   t = n;
   for ( i = k; i < (int)((n - k + 1) / 2) + k; i ++ )
   {
    a[0] = a;
    a = a[t];
    a[t] = a[0];
    t --;
   }
   print( a, n );//打印
   //判断排列是否求完
   for ( j = 1; j < n; j ++ )
    if ( a[j] < a[j+1] )
     break;
  }
}
delete a;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
//求组合要比排列容易
#include "stdio.h"
void combination( int *a, int *b, int n, int m );
void print( int *b, int n );
int get_nextcob( int *b, int n, int m );
void main ()
{
int *a, *b;
a = new int[11];
b = new int[3];
for ( int i = 1; i < 11; i ++ )
  a = i;
combination( a, b, 10, 10);
}
void combination( int *a, int *b, int n, int m )
// 求从数组a的n个元素中取m个元素的组合
{
int f;
f = 0;
if ( n < m )
{
  printf("m太大!");
  return;
}
// 初始化数组b
for ( int i = 1; i < m+1; i ++ )
  b = a;
print( b, m );
while( 1 )
{
  if ( get_nextcob( b, n, m ) == 0 )
   break;
  print( b, m );
}
}
void print( int *b, int m )
{
for ( int i = 1; i < m + 1; i++ )
  printf( "%4d" , b );
printf("\n");
}
int get_nextcob( int *b, int n, int m )
{
int f;
f = 0;
for ( int i = 1; i < m + 1; i ++ )
  if ( b < n - m + i )
   f = i;
if ( f == 0 )
  return 0;
b[0] = b[f];
b[f] = b[f] + 1;
for (i = f + 1; i < m + 1; i ++ )
  b = b[i-1] + 1;
return 1;
}

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-17 11:15
flyingcat
Rank: 4
来 自:HDU
等 级:业余侠客
威 望:2
帖 子:55
专家分:230
注 册:2010-7-18
收藏
得分:3 
//用qsort,它包含在stdlib.h中,下面是一段简单的按字典排序的程序

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int cmp(const void *a, const void *b)
{
    return (strcmp((char*)a,(char*)b));
}

int main()
{
    char ch[101][10];
    strcpy(ch[0],"abcde");
    strcpy(ch[1],"cdefg");
    strcpy(ch[2],"bcdef");
    qsort(ch,3,sizeof(ch[0]),cmp);
    for(int i=0;i<3;i++)
        printf("%s\n",ch[i]);
    return 0;
}
2010-07-18 09:44
fengheng
Rank: 1
来 自:shanghai
等 级:新手上路
帖 子:24
专家分:8
注 册:2010-5-25
收藏
得分:3 
学习一下。

虚心使人进步,做最好的自己!
2010-07-18 13:58
chengUFO
Rank: 1
等 级:新手上路
帖 子:65
专家分:5
注 册:2009-8-8
收藏
得分:0 
太深奥啦。。。。
2011-03-22 21:38
xiaobai1593
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2011-2-25
收藏
得分:0 
不太明白字典序是什么...
2011-04-15 09:12
快速回复:C语言实现字典序法
数据加载中...
 
   



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

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