好程序值得继续讨论学习。
											一个排序问题求解全班同学排成 6 排, A 、 B 、 C 、 D 、 E 、 F 等 6 人分别站在第 1 排到第 6 排 • 用 6 个 int 变量表示 A — F 的位置 –
A 不在第 1 排 à a != 1
A 与 B 前后相邻 (a == b + 1) || (a == b - 1)
C 在 D 前面 c == d - 1
E 在 B 的前两排 e == b - 2
C 在 F 后的第 4 排 c == f + 4
怎么让输出结果是f e a b c d 啊
前天 22:59
举报帖子
使用道具
我来评分
beyondyf
等 级:版主
威 望:30
帖 子:1907
专家分:6828
注 册:2008-1-21
第 2 楼 得分:10 很晚了,就不解释代码了,自己揣摩一下。
程序代码:
#include <stdio.h>
#define ROW_LEN 6
int judge(int * r)
{
if(r[0] != 1)
if(r[0] == r[1] + 1 || r[0] == r[1] - 1)
if(r[2] == r[3] - 1)
if(r[4] == r[1] - 2)
if(r[2] == r[5] + 4)
return 1;
return 0;
}
void print_row(int * r)
{
int i;
char p[ROW_LEN + 1];
for(p[ROW_LEN] = '\0', i = 0; i < ROW_LEN; i++) p[r[i] - 1] = i + 'a';
puts(p);
}
void search(int * r, int deep)
{
int i, j, t;
if(deep == ROW_LEN && judge(r))
{
print_row(r);
return;
}
for(i = deep; i < ROW_LEN; i++)
for(j = i; j < ROW_LEN; j++)
{
t = r[i]; r[i] = r[j]; r[j] = t;
search(r, deep + 1);
t = r[i]; r[i] = r[j]; r[j] = t;
}
}
int main()
{
int r[] = {1, 2, 3, 4, 5, 6};
search(r, 0);
return 0;
版主的程序很是精妙,应该好好学习。本人大把年纪人业余学习,学生们更应努力。
我研究了好一会,从入门者思维出发,改了一下,希望入门的朋友能有收获。
 程序代码:
程序代码:#include <stdio.h>
#define ROW_LEN        6
int judge(char * p)
{
    if(p[0]!='a')
   if(p[0] == p[1] + 1 || p[0] == p[1] - 1)
    if(p[2] == p[3] - 1)
    if(p[4] == p[1] - 2)
    if(p[2] == p[5] + 4)
        return 1;
    return 0;
}
void print_row(char * p)
{
    int i;
    char r[ROW_LEN+1 ];
    for(p[ROW_LEN] = '\0', i = 0; i < ROW_LEN; i++) p[i];//printf("%c",p[i]);
 puts(p);
}
void search(char * p, int deep)
{
    int i, j, t;
    if(deep == ROW_LEN && judge(p))
    {
        print_row(p);
        return;
    }
    for(i = deep; i < ROW_LEN; i++)
    for(j = i; j < ROW_LEN; j++)
    {
        t = p[i]; p[i] = p[j]; p[j] = t;
        search(p, deep + 1);
        t = p[i]; p[i] = p[j]; p[j] = t;
    }
}
int main()
{
    char r[] = {'a', 'b', 'c','d', 'e', 'f'};
    search(r, 0);
    getchar();
    return 0;
}										
					
	


 
											





 
	    

 
	




