好程序值得继续讨论学习。
一个排序问题求解全班同学排成 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; }